diff --git a/src/js/popup.js b/src/js/popup.js index beb541a..d73cf75 100644 --- a/src/js/popup.js +++ b/src/js/popup.js @@ -1092,32 +1092,36 @@ Logic.registerPanel(P_CONTAINER_EDIT, { const tabId = currentTab.id; const fullURL = this.checkUrl(url); - // Assign URL to container - await Logic.setOrRemoveAssignment(tabId, fullURL, userContextId, false); + if (fullURL !== null) { + // Assign URL to container + await Logic.setOrRemoveAssignment(tabId, fullURL, userContextId, false); - // Clear form - document.querySelector("#edit-container-panel-site-input").value = ""; + // Clear form + document.querySelector("#edit-container-panel-site-input").value = ""; - // Show new assignments - const assignments = await Logic.getAssignmentObjectByContainer(userContextId); - this.showAssignedContainers(assignments); + // Show new assignments + const assignments = await Logic.getAssignmentObjectByContainer(userContextId); + this.showAssignedContainers(assignments); + } }, checkUrl(url){ // append "https://" if protocol not found + const validUrl = /[\w.-]+(?:\.[\w.-]+)/g; const regexWww = /.*www\..*/g; - const foundWww = url.match(regexWww); const regexhttp = /^http:\/\/.*/g; const regexhttps = /^https:\/\/.*/g; - const foundhttp = url.match(regexhttp); - const foundhttps = url.match(regexhttps); let newURL = url; + + if (!url.match(validUrl)) { + return null; + } - if (!foundhttp && !foundhttps) { + if (!url.match(regexhttp) && !url.match(regexhttps)) { newURL = "https://" + url; } - if (!foundWww) { + if (!url.match(regexWww)) { if (newURL.match(regexhttp)) { newURL = "http://www." + newURL.substring(7); } else if (newURL.match(regexhttps)) { diff --git a/test/issues/1670.test.js b/test/issues/1670.test.js new file mode 100644 index 0000000..fe8ae84 --- /dev/null +++ b/test/issues/1670.test.js @@ -0,0 +1,81 @@ +// const expect = require("chai").expect; +const {initializeWithTab} = require("../common"); + +describe("#1670", function () { + beforeEach(async function () { + this.webExt = await initializeWithTab(); + }); + + afterEach(function () { + this.webExt.destroy(); + }); + + describe("creating a new container", function () { + beforeEach(async function () { + await this.webExt.popup.helper.clickElementById("container-add-link"); + await this.webExt.popup.helper.clickElementById("edit-container-ok-link"); + }); + + it("should create it in the browser as well", function () { + this.webExt.background.browser.contextualIdentities.create.should.have.been.calledOnce; + }); + + describe("manually assign a valid URL to a container", function () { + const exampleUrl = "https://github.com/mozilla/multi-account-containers"; + beforeEach(async function () { + await this.webExt.popup.helper.clickElementById("edit-containers-link"); + await this.webExt.popup.helper.clickElementByQuerySelectorAll(".edit-container-icon", "last"); + this.webExt.popup.window.document.getElementById("edit-container-panel-site-input").value = exampleUrl; + await this.webExt.popup.helper.clickElementById("edit-container-site-link"); + }); + + it("should assign the URL to a container", function () { + this.webExt.background.browser.contextualIdentities.create.should.have.been.calledOnce; + }); + }); + + describe("manually assign valid URL without protocol to a container", function () { + const exampleUrl = "github.com/mozilla/multi-account-containers"; + beforeEach(async function () { + await this.webExt.popup.helper.clickElementById("edit-containers-link"); + await this.webExt.popup.helper.clickElementByQuerySelectorAll(".edit-container-icon", "last"); + this.webExt.popup.window.document.getElementById("edit-container-panel-site-input").value = exampleUrl; + await this.webExt.popup.helper.clickElementById("edit-container-site-link"); + }); + + it("should assign the URL without protocol to a container", function () { + this.webExt.background.browser.contextualIdentities.create.should.have.been.calledOnce; + }); + }); + + describe("manually assign an invalid URL to a container", function () { + const exampleUrl = "github"; + beforeEach(async function () { + await this.webExt.popup.helper.clickElementById("edit-containers-link"); + await this.webExt.popup.helper.clickElementByQuerySelectorAll(".edit-container-icon", "last"); + this.webExt.popup.window.document.getElementById("edit-container-panel-site-input").value = exampleUrl; + await this.webExt.popup.helper.clickElementById("edit-container-site-link"); + }); + + it("should not assign the URL to a container", function () { + // console.log(this.webExt.background.browser.contextualIdentities); + // expect( console.log.calledOnce ).to.be.true; + this.webExt.background.browser.contextualIdentities.update.should.not.have.been.called; + }); + }); + + describe("manually assign empty URL to a container", function () { + const exampleUrl = ""; + beforeEach(async function () { + await this.webExt.popup.helper.clickElementById("edit-containers-link"); + await this.webExt.popup.helper.clickElementByQuerySelectorAll(".edit-container-icon", "last"); + this.webExt.popup.window.document.getElementById("edit-container-panel-site-input").value = exampleUrl; + await this.webExt.popup.helper.clickElementById("edit-container-site-link"); + }); + + it("should not assign the URL to a container", function () { + this.webExt.background.browser.contextualIdentities.update.should.not.have.been.called; + }); + }); + }); +}); \ No newline at end of file