<p dir="auto"><strong>Expected Behavior</strong><br>
Use the session.setProxy function of a window to set a user:pass authenticated proxy. Load URL in that window. Expect that app.login event is triggered and request is made.<br>
<strong>Actual behavior</strong><br>
Set session proxy to a user:pass authenticated proxy, loadURL requests fail with status "failed" in dev tools. App.login event never called.<br>
<strong>To Reproduce</strong><br>
Create a window, use the session setProxy function to set a user:pass authenticated proxy. Then try to load ANY url in that window.</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="win.webContents.session.setProxy({
          proxyRules: `http://user:pass@ip:port`
        }, () =&gt; {});
 }
//Requests fail status &quot;failed&quot;
win.loadURL('https://whatismyipaddress.com');
//This is NOT reached
app.on('login', function (event, request, authInfo, callback) {
  if (authInfo.isProxy) {
    log.info(`HI ${JSON.stringify(authInfo)}`)
    // callback('username', 'password');
  }
})"><pre class="notranslate"><code class="notranslate">win.webContents.session.setProxy({
          proxyRules: `http://user:pass@ip:port`
        }, () =&gt; {});
 }
//Requests fail status "failed"
win.loadURL('https://whatismyipaddress.com');
//This is NOT reached
app.on('login', function (event, request, authInfo, callback) {
  if (authInfo.isProxy) {
    log.info(`HI ${JSON.stringify(authInfo)}`)
    // callback('username', 'password');
  }
})
</code></pre></div>
<p dir="auto">Working code with IP authenticated proxies</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="win.webContents.session.setProxy({
          proxyRules: `http://ip:port`
        }, () =&gt; {});
 }
//Requests succeed
win.loadURL('https://whatismyipaddress.com');
//This is reached
app.on('login', function (event, request, authInfo, callback) {
  if (authInfo.isProxy) {
    log.info(`HI ${JSON.stringify(authInfo)}`)
    // callback('username', 'password');
  }
})"><pre class="notranslate"><code class="notranslate">win.webContents.session.setProxy({
          proxyRules: `http://ip:port`
        }, () =&gt; {});
 }
//Requests succeed
win.loadURL('https://whatismyipaddress.com');
//This is reached
app.on('login', function (event, request, authInfo, callback) {
  if (authInfo.isProxy) {
    log.info(`HI ${JSON.stringify(authInfo)}`)
    // callback('username', 'password');
  }
})
</code></pre></div>
<p dir="auto">This code is working for me with IP authenticated proxies. App.login is triggered and the request completes as expected. Just user:pass proxies that are the issue.</p>
<p dir="auto">When opening chrome dev tools I can see the requests being attempted and returning status "failed".</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="**Screenshots**
If applicable, add screenshots to help explain your problem.

**Additional Information**
Add any other context about the problem here."><pre class="notranslate"><code class="notranslate">**Screenshots**
If applicable, add screenshots to help explain your problem.

**Additional Information**
Add any other context about the problem here.
</code></pre></div>
<p dir="auto">Hello,</p>
<p dir="auto">I'm hoping for some general guidance... it seems when using electron notifications (either with the html5 api in from within renderer process or the notification module inside the main process) each notification fires off three times, resulting in three identical notifications and an annoyed user. My best guess is this is due to electron's multi-process architecture (I can see three instances of my app running).</p>
<p dir="auto">Luckily on macOS (if using the html 5 api) the OS is smart enough to recognize the 3 notifications are identical and collapses them into one, not so lucky if the notifications are coming from the main process using the notification module, and likewise on windows from both main and render processes.</p>
<p dir="auto">I could get into the details of how I'm setting up notifications, but this doesn't seem directly related to notifications rather more to the electron architecture. Anyone have any thoughts or wisdom on how I can work around this?</p>
<ul dir="auto">
<li>Electron version: 1.8.4</li>
<li>Operating system: macOS/Windows (Build only)</li>
</ul>
<h3 dir="auto">Expected behavior</h3>
<p dir="auto">Call notification... e.g.:</p>
<p dir="auto"><strong>Render Process</strong></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="let notify = new Notification('Notification Title', {
  body: 'notification body'
});"><pre class="notranslate"><code class="notranslate">let notify = new Notification('Notification Title', {
  body: 'notification body'
});
</code></pre></div>
<p dir="auto"><em>or</em></p>
<p dir="auto"><strong>Main Process</strong></p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="let notify = new Notification({
  title: 'Notification Title',
  body: 'notification body'
});"><pre class="notranslate"><code class="notranslate">let notify = new Notification({
  title: 'Notification Title',
  body: 'notification body'
});
</code></pre></div>
<p dir="auto">... see one desktop notification.</p>
<h3 dir="auto">Actual behavior</h3>
<p dir="auto">Three desktop notifications are fired.</p>