diff --git a/spec/window-event-handler-spec.js b/spec/window-event-handler-spec.js index 2891aa2db..b5000388c 100644 --- a/spec/window-event-handler-spec.js +++ b/spec/window-event-handler-spec.js @@ -61,7 +61,7 @@ describe('WindowEventHandler', () => { }) ) - describe('when a link is clicked', () => + describe('when a link is clicked', () => { it('opens the http/https links in an external application', () => { const {shell} = require('electron') spyOn(shell, 'openExternal') @@ -93,7 +93,24 @@ describe('WindowEventHandler', () => { windowEventHandler.handleLinkClick(fakeEvent) expect(shell.openExternal).not.toHaveBeenCalled() }) - ) + + it('opens the "atom://" links with URL handler', () => { + const uriHandler = windowEventHandler.atomEnvironment.uriHandlerRegistry + expect(uriHandler).toBeDefined() + spyOn(uriHandler, 'handleURI') + + const link = document.createElement('a') + const linkChild = document.createElement('span') + link.appendChild(linkChild) + link.href = 'atom://github.com' + jasmine.attachToDOM(link) + const fakeEvent = {target: linkChild, currentTarget: link, preventDefault: () => {}} + + windowEventHandler.handleLinkClick(fakeEvent) + expect(uriHandler.handleURI).toHaveBeenCalled() + expect(uriHandler.handleURI.argsForCall[0][0]).toBe('atom://github.com') + }) + }) describe('when a form is submitted', () => it("prevents the default so that the window's URL isn't changed", () => { diff --git a/src/window-event-handler.js b/src/window-event-handler.js index da735294e..6d927e76e 100644 --- a/src/window-event-handler.js +++ b/src/window-event-handler.js @@ -242,8 +242,12 @@ class WindowEventHandler { handleLinkClick (event) { event.preventDefault() const uri = event.currentTarget && event.currentTarget.getAttribute('href') - if (uri && (uri[0] !== '#') && /^https?:\/\//.test(uri)) { - this.applicationDelegate.openExternal(uri) + if (uri && uri[0] !== '#') { + if (/^https?:\/\//.test(uri)) { + this.applicationDelegate.openExternal(uri) + } else if (uri.startsWith('atom://')) { + this.atomEnvironment.uriHandlerRegistry.handleURI(uri) + } } }