Closed Bug 1305050 Opened 8 years ago Closed 8 years ago

Autocomplete delete action triggers a chrome level error

Categories

(Toolkit :: Form Manager, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla52
Tracking Status
firefox52 --- fixed

People

(Reporter: jkt, Assigned: jkt)

References

Details

Attachments

(2 files, 2 obsolete files)

It looks like _resultsCache was removed in toolkit/components/satchel/AutoCompletePopup.jsm however there is still some code active when a user deletes the identity with the delete key so opening a bug.

From what I can tell the bug that caused this was:
https://bugzilla.mozilla.org/show_bug.cgi?id=1294502
The error I get is:
"TypeError: this._resultCache is undefined[Learn More]  AutoCompletePopup.jsm:185:9"
Attached patch jkt-bug-1305050.patch (obsolete) — Splinter Review
It looks like we can just remove these lines of code as no longer used.
Assignee: nobody → jkt
Attached patch jkt-bug-1305050.patch (obsolete) — Splinter Review
Removing another line of code which also wasn't specified.
Attachment #8794205 - Attachment is obsolete: true
Comment on attachment 8794206 [details] [diff] [review]
jkt-bug-1305050.patch

Hey Matt,
This removes the log I was getting when removing a login.
Would you be able to review this?
Thanks
Attachment #8794206 - Flags: review?(MattN+bmo)
Actually update the patch :/
Attachment #8794206 - Attachment is obsolete: true
Attachment #8794206 - Flags: review?(MattN+bmo)
Attachment #8794232 - Flags: review?(MattN+bmo)
Blocks: 1294502
Status: NEW → ASSIGNED
Comment on attachment 8794232 [details] [diff] [review]
jkt-bug-1305050.patch

So after this patch we still remove the login from the visible dropdown too in e10s and non-e10s?

I don't understand how a test didn't catch this. Does the error occur in the logs for https://dxr.mozilla.org/mozilla-central/rev/058cf01f6cf2d2526c28b864a78afd4b97189b2a/toolkit/components/passwordmgr/test/mochitest/test_basic_form_autocomplete.html#420
Can you make one of the testcases in that file using `doKey("delete"…` fail without your patch so we can prevent this in the future?
Attachment #8794232 - Flags: review?(MattN+bmo)
The error does fire with that test however the test still passes, I guess we should have a test checking for thrown errors there as well.
Looks like the chrome context error isn't accessible at all here, I may need to put a similar test in that context to catch thrown errors.
Depends on: 1305962
Comment on attachment 8797831 [details]
Bug 1305050 - Removing chrome error in deleting password autocomplete and improving testing to catch issues.

Sorry this test took so long, should be ok now. I fixed the tests to output messages for expect condition and also the counting logins was wrong too.
Attachment #8797831 - Flags: review?(MattN+bmo)
Attachment #8797831 - Flags: review?(mconley)
Comment on attachment 8797831 [details]
Bug 1305050 - Removing chrome error in deleting password autocomplete and improving testing to catch issues.

https://reviewboard.mozilla.org/r/83438/#review82692

::: toolkit/components/passwordmgr/test/browser/browser_basic_form_autocomplete.js:1
(Diff revision 1)
> +/*

This test doesn't really belong as a browser-chrome one since I believe our other autocomplete ones are mochitest-plain and as a result you're duplicating a helper. I think you said you were having trouble with  Services.console.registerListener and the SpecialPowers equivalent but I suspect that was just due to e10s. I think that SpecialPowers should be given the relevant ability to see the console messages you want instead of changing suites since the problem won't just affect pwmgr.

I also don't think this needs to be its own test. We can check for TypeErrors in all of the mochitest-plain tests via pwmgr_common.js like I thought you started on.

Now that I have more context I'm actually fine with skipping a test for this bug since I'm guessing you're not going to want to convert back to mochitest-plain.

::: toolkit/components/passwordmgr/test/browser/browser_basic_form_autocomplete.js:2
(Diff revision 1)
> +/*
> + * Test capture popup notifications

I think this is stale

::: toolkit/components/passwordmgr/test/browser/browser_basic_form_autocomplete.js:5
(Diff revision 1)
> +let LoginManager = Cc["@mozilla.org/login-manager;1"].
> +                   getService(Ci.nsILoginManager);

Nit: use `Services.logins` instead

::: toolkit/components/passwordmgr/test/mochitest/test_basic_form_autocomplete.html:435
(Diff revision 1)
>    is(numLogins, 5, "Correct number of logins before deleting one");
>  
> +  let countChangedPromise = notifyMenuChanged(3);
>    var deletionPromise = promiseStorageChanged(["removeLogin"]);
>    // On OS X, shift-backspace and shift-delete work, just delete does not.
>    // On Win/Linux, shift-backspace does not work, delete and shift-delete do.
>    doKey("delete", shiftModifier);
>    yield deletionPromise;

If we have 5 logins and then delete one, why are we expecting 3?

::: toolkit/components/satchel/AutoCompletePopup.jsm
(Diff revision 1)
> -    if (idx !== -1) {
> -      this.removeEntry(idx, false);
> -    }

I'm going to defer reviewing this hunk to mconley…

::: toolkit/components/satchel/test/parent_utils.js:77
(Diff revision 1)
>        return gAutocompletePopup.tree.view.rowCount === expectedCount &&
>          (!expectedFirstValue ||
>            expectedCount <= 1 ||
>            gAutocompletePopup.tree.view.getCellText(0, gAutocompletePopup.tree.columns[0]) ===
>            expectedFirstValue);
> -    }).then(() => {
> +    }, 'Waiting for row count change: ' + expectedCount + ' First value: ' + expectedFirstValue).then(() => {

Nit: double quotes

::: toolkit/components/satchel/test/parent_utils.js:87
(Diff revision 1)
>  
>    checkSelectedIndex(expectedIndex) {
>      ContentTaskUtils.waitForCondition(() => {
>        return gAutocompletePopup.popupOpen &&
>               gAutocompletePopup.selectedIndex === expectedIndex;
> -    }).then(() => {
> +    }, 'Checking selected index').then(() => {

Nit: double quotes
Attachment #8797831 - Flags: review?(MattN+bmo)
Comment on attachment 8797831 [details]
Bug 1305050 - Removing chrome error in deleting password autocomplete and improving testing to catch issues.

https://reviewboard.mozilla.org/r/83438/#review82692

> This test doesn't really belong as a browser-chrome one since I believe our other autocomplete ones are mochitest-plain and as a result you're duplicating a helper. I think you said you were having trouble with  Services.console.registerListener and the SpecialPowers equivalent but I suspect that was just due to e10s. I think that SpecialPowers should be given the relevant ability to see the console messages you want instead of changing suites since the problem won't just affect pwmgr.
> 
> I also don't think this needs to be its own test. We can check for TypeErrors in all of the mochitest-plain tests via pwmgr_common.js like I thought you started on.
> 
> Now that I have more context I'm actually fine with skipping a test for this bug since I'm guessing you're not going to want to convert back to mochitest-plain.

Ok will check if that works as this is mostly a copy of en existing test.

> If we have 5 logins and then delete one, why are we expecting 3?

Because the one with a blank username doesn't appear.
Comment on attachment 8797831 [details]
Bug 1305050 - Removing chrome error in deleting password autocomplete and improving testing to catch issues.

https://reviewboard.mozilla.org/r/83438/#review82986

r=me! This should probably also be uplifted to Aurora, since bug 1294502 landed in 51.

::: toolkit/components/satchel/AutoCompletePopup.jsm
(Diff revision 1)
> -    // It's possible to race and have the deleted login no longer be in our
> -    // resultCache's logins, so we remove it from the database above and only
> -    // deal with our resultCache below.
> -    let idx = this._resultCache.logins.findIndex(cur => {
> -      return login.guid === cur.QueryInterface(Ci.nsILoginMetaInfo).guid
> -    });
> -    if (idx !== -1) {
> -      this.removeEntry(idx, false);
> -    }

Yeah, this is a leftover fragment that should not be in here anymore. Thanks for catching this!
Attachment #8797831 - Flags: review?(mconley) → review+
I removed the test mentioned as Bug 1305962 work should be able to pick this up better (the patch there also checks for this error).
Comment on attachment 8797831 [details]
Bug 1305050 - Removing chrome error in deleting password autocomplete and improving testing to catch issues.

https://reviewboard.mozilla.org/r/83438/#review83462

Thanks
Attachment #8797831 - Flags: review?(MattN+bmo) → review+
Keywords: checkin-needed
Pushed by cbook@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/ae10e0596387
Removing chrome error in deleting password autocomplete and improving testing to catch issues. r=MattN,mconley
Keywords: checkin-needed
https://hg.mozilla.org/mozilla-central/rev/ae10e0596387
Status: ASSIGNED → RESOLVED
Closed: 8 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla52
No longer depends on: 1305962
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: