Commit c6bd1508 authored by Ciure Andrei's avatar Ciure Andrei
Browse files

Backed out 3 changesets (bug 1388674) for causing test_formless_submit.html to...

Backed out 3 changesets (bug 1388674) for causing test_formless_submit.html to permafail CLOSED TREE

Backed out changeset d9b1730b8cb3 (bug 1388674)
Backed out changeset d1e436047e1e (bug 1388674)
Backed out changeset 05c8232e7dc5 (bug 1388674)
parent dea26080
Loading
Loading
Loading
Loading
+2 −14
Original line number Diff line number Diff line
@@ -81,15 +81,7 @@ var PermissionPrompts = {
      selectors: ["#notification-popup", "#identity-box"],
      async applyConfig() {
        await closeLastTab();
        // we need to emulate user input in the form for the save-password prompt to be shown
        await clickOn("#login-capture", function beforeContentFn() {
          E10SUtils.wrapHandlingUserInput(content, true, function() {
            let element = content.document.querySelector(
              "input[type=password]"
            );
            element.setUserInput("123456");
          });
        });
        await clickOn("#login-capture");
      },
    },

@@ -148,7 +140,7 @@ async function closeLastTab() {
  lastTab = null;
}

async function clickOn(selector, beforeContentFn) {
async function clickOn(selector) {
  let browserWindow = Services.wm.getMostRecentWindow("navigator:browser");

  // Save the tab so we can close it later.
@@ -157,10 +149,6 @@ async function clickOn(selector, beforeContentFn) {
    URL
  );

  if (beforeContentFn) {
    await ContentTask.spawn(lastTab.linkedBrowser, null, beforeContentFn);
  }

  await ContentTask.spawn(lastTab.linkedBrowser, selector, async function(arg) {
    E10SUtils.wrapHandlingUserInput(content, true, function() {
      let element = content.document.querySelector(arg);
+1 −1
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@
  <a id="addons" href="borderify.xpi">Install Add-On</a>
  <form>
    <input type="email" id="email" value="email@example.com" />
    <input type="password" id="password" value="" />
    <input type="password" id="password" value="123456" />
    <button type="submit" id="login-capture">Login</button>
  </form>

+0 −1
Original line number Diff line number Diff line
@@ -3896,7 +3896,6 @@ pref("signon.generation.available", false);
pref("signon.generation.enabled",           false);
pref("signon.privateBrowsingCapture.enabled", false);
pref("signon.storeWhenAutocompleteOff",     true);
pref("signon.userInputRequiredToCapture.enabled", true);
pref("signon.debug",                        false);
pref("signon.recipes.path",                 "chrome://passwordmgr/content/recipes.json");
pref("signon.schemeUpgrades",               false);
+0 −3
Original line number Diff line number Diff line
@@ -82,9 +82,6 @@ this.LoginHelper = {
    this.storeWhenAutocompleteOff = Services.prefs.getBoolPref(
      "signon.storeWhenAutocompleteOff"
    );
    this.userInputRequiredToCapture = Services.prefs.getBoolPref(
      "signon.userInputRequiredToCapture.enabled"
    );
  },

  createLogger(aLogPrefix) {
+28 −81
Original line number Diff line number Diff line
@@ -216,51 +216,32 @@ const observer = {
      return;
    }

    let ownerDocument = aEvent.target.ownerDocument;
    let window = ownerDocument.defaultView;
    let docState = LoginManagerChild.forWindow(window).stateForDocument(
      ownerDocument
    );
    let window = aEvent.target.ownerDocument.defaultView;

    switch (aEvent.type) {
      // Used to mask fields with filled generated passwords when blurred.
      case "blur": {
        if (docState.generatedPasswordFields.has(aEvent.target)) {
        let unmask = false;
        LoginManagerChild.forWindow(window)._togglePasswordFieldMasking(
          aEvent.target,
          unmask
        );
        }
        break;
      }

      // Used to watch for changes to fields filled with generated passwords.
      case "change": {
        if (docState.generatedPasswordFields.has(aEvent.target)) {
        LoginManagerChild.forWindow(window)._generatedPasswordFilledOrEdited(
          aEvent.target
        );
        }
        break;
      }

      // Used to watch for changes to fields filled with generated passwords.
      case "input": {
        let field = aEvent.target;
        if (docState.generatedPasswordFields.has(field)) {
        LoginManagerChild.forWindow(
          window
        )._maybeStopTreatingAsGeneratedPasswordField(aEvent);
        }
        if (
          field.hasBeenTypePassword ||
          LoginHelper.isUsernameFieldType(field)
        ) {
          // flag this form as user-modified
          let formLikeRoot = FormLikeFactory.findRootForField(field);
          docState.fieldModificationsByRootElement.set(formLikeRoot, true);
        }
        break;
      }

@@ -277,10 +258,7 @@ const observer = {
      }

      case "focus": {
        if (
          aEvent.target.type == "password" &&
          docState.generatedPasswordFields.has(aEvent.target)
        ) {
        if (aEvent.target.type == "password") {
          // Used to unmask fields with filled generated passwords when focused.
          let unmask = true;
          LoginManagerChild.forWindow(window)._togglePasswordFieldMasking(
@@ -879,12 +857,6 @@ this.LoginManagerChild = class LoginManagerChild extends JSWindowActorChild {
      return;
    }

    // set up input event listeners so we know if the user has interacted with these fields
    form.rootElement.addEventListener("input", observer, {
      capture: true,
      mozSystemGroup: true,
    });

    this._getLoginDataFromParent(form, { showMasterPassword: true })
      .then(this.loginsFound.bind(this))
      .catch(Cu.reportError);
@@ -902,15 +874,10 @@ this.LoginManagerChild = class LoginManagerChild extends JSWindowActorChild {
         * Keeps track of filled fields and values.
         */
        fillsByRootElement: new WeakMap(),
        /**
         * Keeps track of fields we've filled with generated passwords
         */
        generatedPasswordFields: new WeakSet(),
        /**
         * Keeps track of logins that were last submitted.
         */
        lastSubmittedValuesByRootElement: new WeakMap(),
        fieldModificationsByRootElement: new WeakMap(),
        loginFormRootElements: new WeakSet(),
      };
      this._loginFormStateByDocument.set(document, loginFormState);
@@ -1573,17 +1540,9 @@ this.LoginManagerChild = class LoginManagerChild extends JSWindowActorChild {
      return;
    }

    let docState = this.stateForDocument(doc);
    let fieldsModified = this._formHasModifiedFields(formLikeRoot);
    if (!fieldsModified && LoginHelper.userInputRequiredToCapture) {
      // we know no fields in this form had user modifications, so don't prompt
      log(
        "(form submission ignored -- submitting values that are not changed by the user)"
    let autoFilledLogin = this.stateForDocument(doc).fillsByRootElement.get(
      form.rootElement
    );
      return;
    }

    let autoFilledLogin = docState.fillsByRootElement.get(form.rootElement);

    let detail = {
      origin,
@@ -1616,10 +1575,6 @@ this.LoginManagerChild = class LoginManagerChild extends JSWindowActorChild {
  _stopTreatingAsGeneratedPasswordField(passwordField) {
    log("_stopTreatingAsGeneratedPasswordField");

    let fields = this.stateForDocument(passwordField.ownerDocument)
      .generatedPasswordFields;
    fields.delete(passwordField);

    // Remove all the event listeners added in _generatedPasswordFilledOrEdited
    for (let eventType of ["blur", "change", "focus", "input"]) {
      passwordField.removeEventListener(eventType, observer, {
@@ -1648,8 +1603,6 @@ this.LoginManagerChild = class LoginManagerChild extends JSWindowActorChild {

    let win = passwordField.ownerGlobal;
    let formLikeRoot = FormLikeFactory.findRootForField(passwordField);
    let docState = this.stateForDocument(passwordField.ownerDocument);
    docState.generatedPasswordFields.add(passwordField);

    this._highlightFilledField(passwordField);

@@ -1840,6 +1793,7 @@ this.LoginManagerChild = class LoginManagerChild extends JSWindowActorChild {
    }

    log("_fillForm", form.elements);
    let usernameField;
    // Will be set to one of AUTOFILL_RESULT in the `try` block.
    let autofillResult = -1;
    const AUTOFILL_RESULT = {
@@ -1857,16 +1811,6 @@ this.LoginManagerChild = class LoginManagerChild extends JSWindowActorChild {
      PASSWORD_AUTOCOMPLETE_NEW_PASSWORD: 11,
    };

    // Heuristically determine what the user/pass fields are
    // We do this before checking to see if logins are stored,
    // so that the user isn't prompted for a master password
    // without need.
    let [usernameField, passwordField] = this._getFormFields(
      form,
      false,
      recipes
    );

    try {
      // Nothing to do if we have no matching (excluding form action
      // checks) logins available, and there isn't a need to show
@@ -1881,6 +1825,17 @@ this.LoginManagerChild = class LoginManagerChild extends JSWindowActorChild {
        return;
      }

      // Heuristically determine what the user/pass fields are
      // We do this before checking to see if logins are stored,
      // so that the user isn't prompted for a master password
      // without need.
      let passwordField;
      [usernameField, passwordField] = this._getFormFields(
        form,
        false,
        recipes
      );

      // If we have a password inputElement parameter and it's not
      // the same as the one heuristically found, use the parameter
      // one instead.
@@ -2173,14 +2128,6 @@ this.LoginManagerChild = class LoginManagerChild extends JSWindowActorChild {
    }
  }

  _formHasModifiedFields(formLikeRoot) {
    let state = this.stateForDocument(formLikeRoot.ownerDocument);
    let fieldsModified = state.fieldModificationsByRootElement.get(
      formLikeRoot
    );
    return fieldsModified;
  }

  /**
   * Given a field, determine whether that field was last filled as a username
   * field AND whether the username is still filled in with the username AND
Loading