Browse Source

refactor: use `switch` instead of multiple `else-if`

Milan Burda 1 year ago
parent
commit
484f368ee8

+ 21 - 14
lib/browser/api/browser-window.ts

@@ -55,22 +55,29 @@ BrowserWindow.prototype._init = function (this: BWT) {
 
   const warn = deprecate.warnOnceMessage('\'scroll-touch-{begin,end,edge}\' are deprecated and will be removed. Please use the WebContents \'input-event\' event instead.');
   this.webContents.on('input-event', (_, e) => {
-    if (e.type === 'gestureScrollBegin') {
-      if (this.listenerCount('scroll-touch-begin') !== 0) {
-        warn();
-        this.emit('scroll-touch-edge');
-        this.emit('scroll-touch-begin');
+    switch (e.type) {
+      case 'gestureScrollBegin': {
+        if (this.listenerCount('scroll-touch-begin') !== 0) {
+          warn();
+          this.emit('scroll-touch-edge');
+          this.emit('scroll-touch-begin');
+        }
+        break;
       }
-    } else if (e.type === 'gestureScrollUpdate') {
-      if (this.listenerCount('scroll-touch-edge') !== 0) {
-        warn();
-        this.emit('scroll-touch-edge');
+      case 'gestureScrollUpdate': {
+        if (this.listenerCount('scroll-touch-edge') !== 0) {
+          warn();
+          this.emit('scroll-touch-edge');
+        }
+        break;
       }
-    } else if (e.type === 'gestureScrollEnd') {
-      if (this.listenerCount('scroll-touch-end') !== 0) {
-        warn();
-        this.emit('scroll-touch-edge');
-        this.emit('scroll-touch-end');
+      case 'gestureScrollEnd': {
+        if (this.listenerCount('scroll-touch-end') !== 0) {
+          warn();
+          this.emit('scroll-touch-edge');
+          this.emit('scroll-touch-end');
+        }
+        break;
       }
     }
   });

+ 27 - 19
lib/browser/api/net-client-request.ts

@@ -461,31 +461,39 @@ export class ClientRequest extends Writable implements Electron.ClientRequest {
 
     this._urlLoader.on('redirect', (event, redirectInfo, headers) => {
       const { statusCode, newMethod, newUrl } = redirectInfo;
-      if (this._redirectPolicy === 'error') {
-        this._die(new Error('Attempted to redirect, but redirect policy was \'error\''));
-      } else if (this._redirectPolicy === 'manual') {
-        let _followRedirect = false;
-        this._followRedirectCb = () => { _followRedirect = true; };
-        try {
-          this.emit('redirect', statusCode, newMethod, newUrl, headers);
-        } finally {
-          this._followRedirectCb = undefined;
-          if (!_followRedirect && !this._aborted) {
-            this._die(new Error('Redirect was cancelled'));
+      switch (this._redirectPolicy) {
+        case 'error': {
+          this._die(new Error('Attempted to redirect, but redirect policy was \'error\''));
+          break;
+        }
+        case 'manual': {
+          let _followRedirect = false;
+          this._followRedirectCb = () => { _followRedirect = true; };
+          try {
+            this.emit('redirect', statusCode, newMethod, newUrl, headers);
+          } finally {
+            this._followRedirectCb = undefined;
+            if (!_followRedirect && !this._aborted) {
+              this._die(new Error('Redirect was cancelled'));
+            }
           }
+          break;
         }
-      } else if (this._redirectPolicy === 'follow') {
+        case 'follow': {
         // Calling followRedirect() when the redirect policy is 'follow' is
         // allowed but does nothing. (Perhaps it should throw an error
         // though...? Since the redirect will happen regardless.)
-        try {
-          this._followRedirectCb = () => {};
-          this.emit('redirect', statusCode, newMethod, newUrl, headers);
-        } finally {
-          this._followRedirectCb = undefined;
+          try {
+            this._followRedirectCb = () => {};
+            this.emit('redirect', statusCode, newMethod, newUrl, headers);
+          } finally {
+            this._followRedirectCb = undefined;
+          }
+          break;
+        }
+        default: {
+          this._die(new Error(`Unexpected redirect policy '${this._redirectPolicy}'`));
         }
-      } else {
-        this._die(new Error(`Unexpected redirect policy '${this._redirectPolicy}'`));
       }
     });
 

+ 19 - 6
lib/browser/api/protocol.ts

@@ -48,12 +48,25 @@ function convertToRequestBody (uploadData: ProtocolRequest['uploadData']): Reque
       } else {
         if (!chunks.length) { return controller.close(); }
         const chunk = chunks.shift()!;
-        if (chunk.type === 'rawData') { controller.enqueue(chunk.bytes); } else if (chunk.type === 'file') {
-          current = Readable.toWeb(createReadStream(chunk.filePath, { start: chunk.offset ?? 0, end: chunk.length >= 0 ? chunk.offset + chunk.length : undefined })).getReader();
-          this.pull!(controller);
-        } else if (chunk.type === 'stream') {
-          current = makeStreamFromPipe(chunk.body).getReader();
-          this.pull!(controller);
+        switch (chunk.type) {
+          case 'rawData': {
+            controller.enqueue(chunk.bytes);
+            break;
+          }
+          case 'file': {
+            const stream = createReadStream(chunk.filePath, {
+              start: chunk.offset ?? 0,
+              end: chunk.length >= 0 ? chunk.offset + chunk.length : undefined
+            });
+            current = Readable.toWeb(stream).getReader();
+            this.pull!(controller);
+            break;
+          }
+          case 'stream': {
+            current = makeStreamFromPipe(chunk.body).getReader();
+            this.pull!(controller);
+            break;
+          }
         }
       }
     }

+ 46 - 24
spec/api-browser-window-spec.ts

@@ -591,22 +591,34 @@ describe('BrowserWindow module', () => {
         let url = null as unknown as string;
         before(async () => {
           server = http.createServer((req, res) => {
-            if (req.url === '/navigate-top') {
-              res.end('<a target=_top href="/">navigate _top</a>');
-            } else if (req.url === '/navigate-iframe') {
-              res.end('<a href="/test">navigate iframe</a>');
-            } else if (req.url === '/navigate-iframe?navigated') {
-              res.end('Successfully navigated');
-            } else if (req.url === '/navigate-iframe-immediately') {
-              res.end(`
+            switch (req.url) {
+              case '/navigate-top': {
+                res.end('<a target=_top href="/">navigate _top</a>');
+                break;
+              }
+              case '/navigate-iframe': {
+                res.end('<a href="/test">navigate iframe</a>');
+                break;
+              }
+              case '/navigate-iframe?navigated': {
+                res.end('Successfully navigated');
+                break;
+              }
+              case '/navigate-iframe-immediately': {
+                res.end(`
                 <script type="text/javascript" charset="utf-8">
                   location.href += '?navigated'
                 </script>
               `);
-            } else if (req.url === '/navigate-iframe-immediately?navigated') {
-              res.end('Successfully navigated');
-            } else {
-              res.end('');
+                break;
+              }
+              case '/navigate-iframe-immediately?navigated': {
+                res.end('Successfully navigated');
+                break;
+              }
+              default: {
+                res.end('');
+              }
             }
           });
           url = (await listen(server)).url;
@@ -882,18 +894,28 @@ describe('BrowserWindow module', () => {
         ];
         before(async () => {
           server = http.createServer((req, res) => {
-            if (req.url === '/navigate') {
-              res.end('<a href="/">navigate</a>');
-            } else if (req.url === '/redirect') {
-              res.end('<a href="/redirect2">redirect</a>');
-            } else if (req.url === '/redirect2') {
-              res.statusCode = 302;
-              res.setHeader('location', url);
-              res.end();
-            } else if (req.url === '/in-page') {
-              res.end('<a href="#in-page">redirect</a><div id="in-page"></div>');
-            } else {
-              res.end('');
+            switch (req.url) {
+              case '/navigate': {
+                res.end('<a href="/">navigate</a>');
+                break;
+              }
+              case '/redirect': {
+                res.end('<a href="/redirect2">redirect</a>');
+                break;
+              }
+              case '/redirect2': {
+                res.statusCode = 302;
+                res.setHeader('location', url);
+                res.end();
+                break;
+              }
+              case '/in-page': {
+                res.end('<a href="#in-page">redirect</a><div id="in-page"></div>');
+                break;
+              }
+              default: {
+                res.end('');
+              }
             }
           });
           url = (await listen(server)).url;

+ 32 - 27
spec/api-crash-reporter-spec.ts

@@ -501,33 +501,38 @@ ifdescribe(!isLinuxOnArm && !process.mas && !process.env.DISABLE_CRASH_REPORTER_
     });
 
     function crash (processType: string, remotely: Function) {
-      if (processType === 'main') {
-        return remotely(() => {
-          setTimeout().then(() => { process.crash(); });
-        });
-      } else if (processType === 'renderer') {
-        return remotely(() => {
-          const { BrowserWindow } = require('electron');
-          const bw = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } });
-          bw.loadURL('about:blank');
-          bw.webContents.executeJavaScript('process.crash()');
-        });
-      } else if (processType === 'sandboxed-renderer') {
-        const preloadPath = path.join(__dirname, 'fixtures', 'apps', 'crash', 'sandbox-preload.js');
-        return remotely((preload: string) => {
-          const { BrowserWindow } = require('electron');
-          const bw = new BrowserWindow({ show: false, webPreferences: { sandbox: true, preload, contextIsolation: false } });
-          bw.loadURL('about:blank');
-        }, preloadPath);
-      } else if (processType === 'node') {
-        const crashScriptPath = path.join(__dirname, 'fixtures', 'apps', 'crash', 'node-crash.js');
-        return remotely((crashScriptPath: string) => {
-          const { app } = require('electron');
-          const childProcess = require('node:child_process');
-          const version = app.getVersion();
-          const url = 'http://127.0.0.1';
-          childProcess.fork(crashScriptPath, [url, version], { silent: true });
-        }, crashScriptPath);
+      switch (processType) {
+        case 'main': {
+          return remotely(() => {
+            setTimeout().then(() => { process.crash(); });
+          });
+        }
+        case 'renderer': {
+          return remotely(() => {
+            const { BrowserWindow } = require('electron');
+            const bw = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } });
+            bw.loadURL('about:blank');
+            bw.webContents.executeJavaScript('process.crash()');
+          });
+        }
+        case 'sandboxed-renderer': {
+          const preloadPath = path.join(__dirname, 'fixtures', 'apps', 'crash', 'sandbox-preload.js');
+          return remotely((preload: string) => {
+            const { BrowserWindow } = require('electron');
+            const bw = new BrowserWindow({ show: false, webPreferences: { sandbox: true, preload, contextIsolation: false } });
+            bw.loadURL('about:blank');
+          }, preloadPath);
+        }
+        case 'node': {
+          const crashScriptPath = path.join(__dirname, 'fixtures', 'apps', 'crash', 'node-crash.js');
+          return remotely((crashScriptPath: string) => {
+            const { app } = require('electron');
+            const childProcess = require('node:child_process');
+            const version = app.getVersion();
+            const url = 'http://127.0.0.1';
+            childProcess.fork(crashScriptPath, [url, version], { silent: true });
+          }, crashScriptPath);
+        }
       }
     }
 

+ 22 - 12
spec/api-web-contents-spec.ts

@@ -1415,18 +1415,28 @@ describe('webContents module', () => {
     before(async () => {
       server = http.createServer((req, res) => {
         const respond = () => {
-          if (req.url === '/redirect-cross-site') {
-            res.setHeader('Location', `${crossSiteUrl}/redirected`);
-            res.statusCode = 302;
-            res.end();
-          } else if (req.url === '/redirected') {
-            res.end('<html><script>window.localStorage</script></html>');
-          } else if (req.url === '/first-window-open') {
-            res.end(`<html><script>window.open('${serverUrl}/second-window-open', 'first child');</script></html>`);
-          } else if (req.url === '/second-window-open') {
-            res.end('<html><script>window.open(\'wrong://url\', \'second child\');</script></html>');
-          } else {
-            res.end();
+          switch (req.url) {
+            case '/redirect-cross-site': {
+              res.setHeader('Location', `${crossSiteUrl}/redirected`);
+              res.statusCode = 302;
+              res.end();
+              break;
+            }
+            case '/redirected': {
+              res.end('<html><script>window.localStorage</script></html>');
+              break;
+            }
+            case '/first-window-open': {
+              res.end(`<html><script>window.open('${serverUrl}/second-window-open', 'first child');</script></html>`);
+              break;
+            }
+            case '/second-window-open': {
+              res.end('<html><script>window.open(\'wrong://url\', \'second child\');</script></html>');
+              break;
+            }
+            default: {
+              res.end();
+            }
           }
         };
         setTimeout().then(respond);

+ 106 - 62
spec/chromium-spec.ts

@@ -628,15 +628,22 @@ describe('chromium features', () => {
         }
       });
       w.webContents.on('ipc-message', (event, channel, message) => {
-        if (channel === 'reload') {
-          w.webContents.reload();
-        } else if (channel === 'error') {
-          done(message);
-        } else if (channel === 'response') {
-          expect(message).to.equal('Hello from serviceWorker!');
-          session.fromPartition('sw-file-scheme-spec').clearStorageData({
-            storages: ['serviceworkers']
-          }).then(() => done());
+        switch (channel) {
+          case 'reload': {
+            w.webContents.reload();
+            break;
+          }
+          case 'error': {
+            done(message);
+            break;
+          }
+          case 'response': {
+            expect(message).to.equal('Hello from serviceWorker!');
+            session.fromPartition('sw-file-scheme-spec').clearStorageData({
+              storages: ['serviceworkers']
+            }).then(() => done());
+            break;
+          }
         }
       });
       w.webContents.on('render-process-gone', () => done(new Error('WebContents crashed.')));
@@ -666,18 +673,25 @@ describe('chromium features', () => {
         }
       });
       w.webContents.on('ipc-message', (event, channel, message) => {
-        if (channel === 'reload') {
-          w.webContents.reload();
-        } else if (channel === 'error') {
-          done(`unexpected error : ${message}`);
-        } else if (channel === 'response') {
-          expect(message).to.equal('Hello from serviceWorker!');
-          customSession.clearStorageData({
-            storages: ['serviceworkers']
-          }).then(() => {
-            customSession.protocol.uninterceptProtocol('file');
-            done();
-          });
+        switch (channel) {
+          case 'reload': {
+            w.webContents.reload();
+            break;
+          }
+          case 'error': {
+            done(`unexpected error : ${message}`);
+            break;
+          }
+          case 'response': {
+            expect(message).to.equal('Hello from serviceWorker!');
+            customSession.clearStorageData({
+              storages: ['serviceworkers']
+            }).then(() => {
+              customSession.protocol.uninterceptProtocol('file');
+              done();
+            });
+            break;
+          }
         }
       });
       w.webContents.on('render-process-gone', () => done(new Error('WebContents crashed.')));
@@ -702,18 +716,25 @@ describe('chromium features', () => {
         }
       });
       w.webContents.on('ipc-message', (event, channel, message) => {
-        if (channel === 'reload') {
-          w.webContents.reload();
-        } else if (channel === 'error') {
-          done(`unexpected error : ${message}`);
-        } else if (channel === 'response') {
-          expect(message).to.equal('Hello from serviceWorker!');
-          customSession.clearStorageData({
-            storages: ['serviceworkers']
-          }).then(() => {
-            customSession.protocol.uninterceptProtocol(serviceWorkerScheme);
-            done();
-          });
+        switch (channel) {
+          case 'reload': {
+            w.webContents.reload();
+            break;
+          }
+          case 'error': {
+            done(`unexpected error : ${message}`);
+            break;
+          }
+          case 'response': {
+            expect(message).to.equal('Hello from serviceWorker!');
+            customSession.clearStorageData({
+              storages: ['serviceworkers']
+            }).then(() => {
+              customSession.protocol.uninterceptProtocol(serviceWorkerScheme);
+              done();
+            });
+            break;
+          }
         }
       });
       w.webContents.on('render-process-gone', () => done(new Error('WebContents crashed.')));
@@ -2431,12 +2452,19 @@ describe('font fallback', () => {
     const fonts = await getRenderedFonts(html);
     expect(fonts).to.be.an('array');
     expect(fonts).to.have.length(1);
-    if (process.platform === 'win32') {
-      expect(fonts[0].familyName).to.equal('Arial');
-    } else if (process.platform === 'darwin') {
-      expect(fonts[0].familyName).to.equal('Helvetica');
-    } else if (process.platform === 'linux') {
-      expect(fonts[0].familyName).to.equal('DejaVu Sans');
+    switch (process.platform) {
+      case 'win32': {
+        expect(fonts[0].familyName).to.equal('Arial');
+        break;
+      }
+      case 'darwin': {
+        expect(fonts[0].familyName).to.equal('Helvetica');
+        break;
+      }
+      case 'linux': {
+        expect(fonts[0].familyName).to.equal('DejaVu Sans');
+        break;
+      }
     } // I think this depends on the distro? We don't specify a default.
   });
 
@@ -2909,16 +2937,23 @@ ifdescribe((process.platform !== 'linux' || app.isUnityRunning()))('navigator.se
 
     it('setAppBadge can be called in a ServiceWorker', (done) => {
       w.webContents.on('ipc-message', (event, channel, message) => {
-        if (channel === 'reload') {
-          w.webContents.reload();
-        } else if (channel === 'error') {
-          done(message);
-        } else if (channel === 'response') {
-          expect(message).to.equal('SUCCESS setting app badge');
-          expect(waitForBadgeCount(expectedBadgeCount)).to.eventually.equal(expectedBadgeCount);
-          session.fromPartition('sw-file-scheme-spec').clearStorageData({
-            storages: ['serviceworkers']
-          }).then(() => done());
+        switch (channel) {
+          case 'reload': {
+            w.webContents.reload();
+            break;
+          }
+          case 'error': {
+            done(message);
+            break;
+          }
+          case 'response': {
+            expect(message).to.equal('SUCCESS setting app badge');
+            expect(waitForBadgeCount(expectedBadgeCount)).to.eventually.equal(expectedBadgeCount);
+            session.fromPartition('sw-file-scheme-spec').clearStorageData({
+              storages: ['serviceworkers']
+            }).then(() => done());
+            break;
+          }
         }
       });
       w.webContents.on('render-process-gone', () => done(new Error('WebContents crashed.')));
@@ -2927,19 +2962,28 @@ ifdescribe((process.platform !== 'linux' || app.isUnityRunning()))('navigator.se
 
     it('clearAppBadge can be called in a ServiceWorker', (done) => {
       w.webContents.on('ipc-message', (event, channel, message) => {
-        if (channel === 'reload') {
-          w.webContents.reload();
-        } else if (channel === 'setAppBadge') {
-          expect(message).to.equal('SUCCESS setting app badge');
-          expect(waitForBadgeCount(expectedBadgeCount)).to.eventually.equal(expectedBadgeCount);
-        } else if (channel === 'error') {
-          done(message);
-        } else if (channel === 'response') {
-          expect(message).to.equal('SUCCESS clearing app badge');
-          expect(waitForBadgeCount(expectedBadgeCount)).to.eventually.equal(expectedBadgeCount);
-          session.fromPartition('sw-file-scheme-spec').clearStorageData({
-            storages: ['serviceworkers']
-          }).then(() => done());
+        switch (channel) {
+          case 'reload': {
+            w.webContents.reload();
+            break;
+          }
+          case 'setAppBadge': {
+            expect(message).to.equal('SUCCESS setting app badge');
+            expect(waitForBadgeCount(expectedBadgeCount)).to.eventually.equal(expectedBadgeCount);
+            break;
+          }
+          case 'error': {
+            done(message);
+            break;
+          }
+          case 'response': {
+            expect(message).to.equal('SUCCESS clearing app badge');
+            expect(waitForBadgeCount(expectedBadgeCount)).to.eventually.equal(expectedBadgeCount);
+            session.fromPartition('sw-file-scheme-spec').clearStorageData({
+              storages: ['serviceworkers']
+            }).then(() => done());
+            break;
+          }
         }
       });
       w.webContents.on('render-process-gone', () => done(new Error('WebContents crashed.')));

+ 54 - 40
spec/fixtures/apps/crash/main.js

@@ -25,51 +25,65 @@ crashReporter.start({
 app.whenReady().then(() => {
   const crashType = app.commandLine.getSwitchValue('crash-type');
 
-  if (crashType === 'main') {
-    process.crash();
-  } else if (crashType === 'renderer') {
-    const w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } });
-    w.loadURL('about:blank');
-    if (setExtraParameters) {
-      w.webContents.executeJavaScript(`
+  switch (crashType) {
+    case 'main': {
+      process.crash();
+      break;
+    }
+    case 'renderer': {
+      const w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } });
+      w.loadURL('about:blank');
+      if (setExtraParameters) {
+        w.webContents.executeJavaScript(`
         require('electron').crashReporter.addExtraParameter('rendererSpecific', 'rs');
         require('electron').crashReporter.addExtraParameter('addedThenRemoved', 'to-be-removed');
         require('electron').crashReporter.removeExtraParameter('addedThenRemoved');
       `);
-    }
-    w.webContents.executeJavaScript('process.crash()');
-    w.webContents.on('render-process-gone', () => process.exit(0));
-  } else if (crashType === 'sandboxed-renderer') {
-    const w = new BrowserWindow({
-      show: false,
-      webPreferences: {
-        sandbox: true,
-        preload: path.resolve(__dirname, 'sandbox-preload.js'),
-        contextIsolation: false
       }
-    });
-    w.loadURL(`about:blank?set_extra=${setExtraParameters ? 1 : 0}`);
-    w.webContents.on('render-process-gone', () => process.exit(0));
-  } else if (crashType === 'node') {
-    const crashPath = path.join(__dirname, 'node-crash.js');
-    const child = childProcess.fork(crashPath, { silent: true });
-    child.on('exit', () => process.exit(0));
-  } else if (crashType === 'node-fork') {
-    const scriptPath = path.join(__dirname, 'fork.js');
-    const child = childProcess.fork(scriptPath, { silent: true });
-    child.on('exit', () => process.exit(0));
-  } else if (crashType === 'node-extra-args') {
-    let exitcode = -1;
-    const crashPath = path.join(__dirname, 'node-extra-args.js');
-    const child = childProcess.fork(crashPath, ['--enable-logging'], { silent: true });
-    child.send('message');
-    child.on('message', (forkedArgs) => {
-      if (JSON.stringify(forkedArgs) !== JSON.stringify(child.spawnargs)) { exitcode = 1; } else { exitcode = 0; }
-      process.exit(exitcode);
-    });
-  } else {
-    console.error(`Unrecognized crash type: '${crashType}'`);
-    process.exit(1);
+      w.webContents.executeJavaScript('process.crash()');
+      w.webContents.on('render-process-gone', () => process.exit(0));
+      break;
+    }
+    case 'sandboxed-renderer': {
+      const w = new BrowserWindow({
+        show: false,
+        webPreferences: {
+          sandbox: true,
+          preload: path.resolve(__dirname, 'sandbox-preload.js'),
+          contextIsolation: false
+        }
+      });
+      w.loadURL(`about:blank?set_extra=${setExtraParameters ? 1 : 0}`);
+      w.webContents.on('render-process-gone', () => process.exit(0));
+      break;
+    }
+    case 'node': {
+      const crashPath = path.join(__dirname, 'node-crash.js');
+      const child = childProcess.fork(crashPath, { silent: true });
+      child.on('exit', () => process.exit(0));
+      break;
+    }
+    case 'node-fork': {
+      const scriptPath = path.join(__dirname, 'fork.js');
+      const child = childProcess.fork(scriptPath, { silent: true });
+      child.on('exit', () => process.exit(0));
+      break;
+    }
+    case 'node-extra-args': {
+      let exitcode = -1;
+      const crashPath = path.join(__dirname, 'node-extra-args.js');
+      const child = childProcess.fork(crashPath, ['--enable-logging'], { silent: true });
+      child.send('message');
+      child.on('message', (forkedArgs) => {
+        if (JSON.stringify(forkedArgs) !== JSON.stringify(child.spawnargs)) { exitcode = 1; } else { exitcode = 0; }
+        process.exit(exitcode);
+      });
+      break;
+    }
+    default: {
+      console.error(`Unrecognized crash type: '${crashType}'`);
+      process.exit(1);
+    }
   }
 });