Closed Bug 591801 Opened 9 years ago Closed 9 years ago

Add-ons manager view-port is blank when opened in a standalone window

Categories

(Toolkit :: Add-ons Manager, defect, major)

defect
Not set
major

Tracking

()

VERIFIED FIXED
mozilla2.0b7
Tracking Status
blocking2.0 --- betaN+
blocking-thunderbird3.2 --- ?

People

(Reporter: u382332, Assigned: mossop)

References

Details

Attachments

(2 files)

User-Agent:       Mozilla/5.0 (Windows NT 5.1; rv:2.0b5pre) Gecko/20100829 Firefox/4.0b5pre
Build Identifier: 

The Add-ons manager is not showing anything in the view-port. It is blank.
(Extensions are working.)

Mozilla/5.0 (Windows NT 5.1; rv:2.0b5pre) Gecko/20100829 Thunderbird/3.2a1pre


Reproducible: Always




Possibly related to Bug 562797 - Add-ons manager doesn't integrate with session history (back/forward button misbehaves)

https://bugzilla.mozilla.org/show_bug.cgi?id=562797
Also, Error console shows:

Error: gCategories.node is null
Source File: chrome://mozapps/content/extensions/extensions.js
Line: 306


Error: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHistory.replaceState]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: chrome://mozapps/content/extensions/extensions.js :: anonymous :: line 343"  data: no]
Confirmed in:
Mozilla/5.0 (Windows NT 5.0; rv:2.0b5pre) Gecko/20100829 Thunderbird/3.2a1pre ID:20100829035152
Blocks: 562797
Status: UNCONFIRMED → NEW
Ever confirmed: true
A Thunderbird debug build (Mac OS X) gives me while opening the broken Add-Ons manager:



pldhash: for the table at address 0x15c1468, the given entrySize of 48 probably favors chaining over double hashing.
++DOCSHELL 0x15c1400 == 9
++DOMWINDOW == 17 (0x2fc86e58) [serial = 18] [outer = 0x0]
WARNING: Subdocument container has no content: file /Volumes/Developer/temp/src/mozilla/layout/base/nsDocumentViewer.cpp, line 2400
WARNING: Context has no global.: file /Volumes/Developer/temp/src/mozilla/dom/base/nsJSEnvironment.cpp, line 2518
++DOMWINDOW == 18 (0x2ff8c448) [serial = 19] [outer = 0x2fc86e20]
WARNING: Subdocument container has no content: file /Volumes/Developer/temp/src/mozilla/layout/base/nsDocumentViewer.cpp, line 2400
WARNING: NS_ENSURE_TRUE(sf) failed: file /Volumes/Developer/temp/src/mozilla/docshell/base/nsDocShell.cpp, line 4882
WARNING: NS_ENSURE_TRUE(sf) failed: file /Volumes/Developer/temp/src/mozilla/docshell/base/nsDocShell.cpp, line 4882
WARNING: Subdocument container has no content: file /Volumes/Developer/temp/src/mozilla/layout/base/nsDocumentViewer.cpp, line 2400
pldhash: for the table at address 0x1676c68, the given entrySize of 48 probably favors chaining over double hashing.
++DOCSHELL 0x1676c00 == 10
++DOMWINDOW == 19 (0x8b2168) [serial = 20] [outer = 0x0]
###!!! ASSERTION: Subdoc frames must have an inner view too: 'innerView', file /Volumes/Developer/temp/src/mozilla/layout/base/nsDocumentViewer.cpp, line 2415
WARNING: Context has no global.: file /Volumes/Developer/temp/src/mozilla/dom/base/nsJSEnvironment.cpp, line 2518
++DOMWINDOW == 20 (0x2fc07058) [serial = 21] [outer = 0x8b2130]
WARNING: Positioned frame that does not handle positioned kids; looking further up the parent chain: file /Volumes/Developer/temp/src/mozilla/layout/base/nsCSSFrameConstructor.cpp, line 5576
WARNING: Positioned frame that does not handle positioned kids; looking further up the parent chain: file /Volumes/Developer/temp/src/mozilla/layout/base/nsCSSFrameConstructor.cpp, line 5576
WARNING: Positioned frame that does not handle positioned kids; looking further up the parent chain: file /Volumes/Developer/temp/src/mozilla/layout/base/nsCSSFrameConstructor.cpp, line 5576
WARNING: Positioned frame that does not handle positioned kids; looking further up the parent chain: file /Volumes/Developer/temp/src/mozilla/layout/base/nsCSSFrameConstructor.cpp, line 5576
WARNING: Positioned frame that does not handle positioned kids; looking further up the parent chain: file /Volumes/Developer/temp/src/mozilla/layout/base/nsCSSFrameConstructor.cpp, line 5576
WARNING: Positioned frame that does not handle positioned kids; looking further up the parent chain: file /Volumes/Developer/temp/src/mozilla/layout/base/nsCSSFrameConstructor.cpp, line 5576
WARNING: Positioned frame that does not handle positioned kids; looking further up the parent chain: file /Volumes/Developer/temp/src/mozilla/layout/base/nsCSSFrameConstructor.cpp, line 5576
JavaScript error: chrome://mozapps/content/extensions/extensions.js, line 306: gCategories.node is null
WARNING: NS_ENSURE_TRUE(sessionHistory) failed: file /Volumes/Developer/temp/src/mozilla/docshell/base/nsDocShell.cpp, line 9550
JavaScript error: , line 0: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHistory.replaceState]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: chrome://mozapps/content/extensions/extensions.js :: anonymous :: line 343"  data: no]
JavaScript error: chrome://mozapps/content/extensions/extensions.js, line 804: this.currentViewObj is null
JavaScript error: chrome://mozapps/content/extensions/extensions.js, line 804: this.currentViewObj is null
WARNING: NS_ENSURE_TRUE(sessionHistory) failed: file /Volumes/Developer/temp/src/mozilla/docshell/base/nsDocShell.cpp, line 9550
WARNING: NS_ENSURE_SUCCESS(rv, rv) failed with result 0x80004005: file /Volumes/Developer/temp/src/mozilla/dom/base/nsHistory.cpp, line 300
WARNING: NS_ENSURE_TRUE(sessionHistory) failed: file /Volumes/Developer/temp/src/mozilla/docshell/base/nsDocShell.cpp, line 9550
WARNING: NS_ENSURE_SUCCESS(rv, rv) failed with result 0x80004005: file /Volumes/Developer/temp/src/mozilla/dom/base/nsHistory.cpp, line 300
JavaScript error: , line 0: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHistory.pushState]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: chrome://mozapps/content/extensions/extensions.js :: anonymous :: line 335"  data: no]
WARNING: NS_ENSURE_TRUE(sessionHistory) failed: file /Volumes/Developer/temp/src/mozilla/docshell/base/nsDocShell.cpp, line 9550
WARNING: NS_ENSURE_SUCCESS(rv, rv) failed with result 0x80004005: file /Volumes/Developer/temp/src/mozilla/dom/base/nsHistory.cpp, line 300
WARNING: NS_ENSURE_TRUE(sessionHistory) failed: file /Volumes/Developer/temp/src/mozilla/docshell/base/nsDocShell.cpp, line 9550
WARNING: NS_ENSURE_SUCCESS(rv, rv) failed with result 0x80004005: file /Volumes/Developer/temp/src/mozilla/dom/base/nsHistory.cpp, line 300
JavaScript error: , line 0: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHistory.pushState]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: chrome://mozapps/content/extensions/extensions.js :: anonymous :: line 335"  data: no]
WARNING: NS_ENSURE_TRUE(sessionHistory) failed: file /Volumes/Developer/temp/src/mozilla/docshell/base/nsDocShell.cpp, line 9550
WARNING: NS_ENSURE_SUCCESS(rv, rv) failed with result 0x80004005: file /Volumes/Developer/temp/src/mozilla/dom/base/nsHistory.cpp, line 300
WARNING: NS_ENSURE_TRUE(sessionHistory) failed: file /Volumes/Developer/temp/src/mozilla/docshell/base/nsDocShell.cpp, line 9550
WARNING: NS_ENSURE_SUCCESS(rv, rv) failed with result 0x80004005: file /Volumes/Developer/temp/src/mozilla/dom/base/nsHistory.cpp, line 300
JavaScript error: , line 0: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHistory.pushState]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: chrome://mozapps/content/extensions/extensions.js :: anonymous :: line 335"  data: no]
WARNING: NS_ENSURE_TRUE(sessionHistory) failed: file /Volumes/Developer/temp/src/mozilla/docshell/base/nsDocShell.cpp, line 9550
WARNING: NS_ENSURE_SUCCESS(rv, rv) failed with result 0x80004005: file /Volumes/Developer/temp/src/mozilla/dom/base/nsHistory.cpp, line 300
WARNING: NS_ENSURE_TRUE(sessionHistory) failed: file /Volumes/Developer/temp/src/mozilla/docshell/base/nsDocShell.cpp, line 9550
WARNING: NS_ENSURE_SUCCESS(rv, rv) failed with result 0x80004005: file /Volumes/Developer/temp/src/mozilla/dom/base/nsHistory.cpp, line 300
JavaScript error: , line 0: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHistory.pushState]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: chrome://mozapps/content/extensions/extensions.js :: anonymous :: line 335"  data: no]
JavaScript error: chrome://mozapps/content/extensions/extensions.js, line 804: this.currentViewObj is null
###!!! ASSERTION: XPConnect is being called on a scope without a 'Components' property!: 'Error', file /Volumes/Developer/temp/src/mozilla/js/src/xpconnect/src/xpcwrappednativescope.cpp, line 792
--DOCSHELL 0x15c1400 == 9
--DOMWINDOW == 19 (0x8b2168) [serial = 20] [outer = 0x0] [url = about:blank]
--DOMWINDOW == 18 (0x2fc07058) [serial = 21] [outer = 0x0] [url = about:blank]
--DOCSHELL 0x1676c00 == 8
Version: unspecified → Trunk
Duplicate of this bug: 591892
blocking-thunderbird3.2: --- → ?
Dave, looks like the fix could have broken all applications which do not have a browser?
Component: General → Add-ons Manager
OS: Windows XP → All
Product: Thunderbird → Toolkit
QA Contact: general → add-ons.manager
Hardware: x86 → All
blocking2.0: --- → ?
blocking2.0: ? → betaN+
Assignee: nobody → dtownsend
Problem seems to stem from here:

http://mxr.mozilla.org/mozilla-central/source/docshell/base/nsDocShell.cpp#10221

This is returning null for the nsISHistory for top-level windows. Do they have no session history?
By "top-level" do you mean the browser UI?
(In reply to comment #7)
> By "top-level" do you mean the browser UI?

I mean if I do window.openDialog("about:addons"). I've discovered the code here (http://mxr.mozilla.org/mozilla-central/source/toolkit/content/widgets/browser.xml#644) which I tried replicating for the webNavigation for the new window. That improves matters but now my attempts to call pushState fail here since mOSHE is null http://mxr.mozilla.org/mozilla-central/source/docshell/base/nsDocShell.cpp#9560
Do you wire up the session history after the page has started loading, already?  If so, then that initial load may not end up in the session history....
(In reply to comment #9)
> Do you wire up the session history after the page has started loading, already?
>  If so, then that initial load may not end up in the session history....

Well the goal would be to have the script in about:addons do the necessary work to make it all work in its own window, so yeah it can't really do that unless the window is already loading. I guess I could detect there is no history and wire it up and then trigger a reload on the window perhaps? Or maybe I can just manually add the initial session history entry.
Blocks: 593326
Summary: Add-ons manager view-port is blank → Add-ons manager view-port is blank when opened in a standalone window
I'm not sure why the summary was changed to Add-ons manager view-port is blank "when opened in a standalone window". As far as I know that is how the AOM opens by default for trunk until Bug 571759 is resolved. Unless I'm missing something here, it wouldn't matter if the AOM opened in a standalone window or a tab.
It does matter if the add-ons manager is opened in a tab or not. In a tab the session history will be wired up and working, in a standalone window it isn't, hence the bug we see here.
Okay, so we need to get Bug 571759 resolved in order to alleviate this particular bug. Is that correct?
(In reply to comment #13)
> Okay, so we need to get Bug 571759 resolved in order to alleviate this
> particular bug. Is that correct?

That would fix the problem for Thunderbird but not for any other applications that need to open the add-ons manager in a window.
This happens to me with the latest release of the Firefox beta (4.0b6).  With this update (on 9/15), the Add-on Manager started opening in a new window.  It was after I installed the compatibility manager so I assumed it was related.

I went into the latest official release of Firefox to disable the compatibility manager but the trouble remains.

Screenshot to follow.

Cheers!
-M
The bug is still not fixed so yes it still happens.
Which action do you have performed so it opens in a new window?
I have no idea.  It wasn't doing that in the previous version - it simply started loading that way with the latest update.

At the same time, I installed the compatibility manager add-on, so I have no idea if it's that or the update that forced it into a separate window.  I do know that the compatibility add-on is disabled (which I did via the official release since I can't access any of my add-ons with the latest beta), and I still have it in a window as shown in the screenshot.
Note: For Thunderbird users, we're moving the add-on manager into a tab (see bug 571759). This will have session history enabled, and therefore will not experience this bug, although this bug will still need to be fixed for other applications.
Confirming same issue with BlueGriffon... I can't put the extension manager in
tabs since tabs are reserved for edited documents. Standalone extension manager
chokes on gCategories.node being null is extensions.js line 380 and in line 418 on nsIDOMHistory.pushState() with NS_ERROR_FAILURE (normal since the app has no notion of browsing history anyway?)
I had been hoping to figure out a way to keep the session history and the forward/back buttons working but I think the solution here is going to be to hide the forward/back buttons and protect the calls to session history.
Attached patch patch rev 1Splinter Review
This patch applies but probably doesn't make sense without bug 597178 fixed. It implements a wrapper around window.history. If session history isn't working then it will just cache the previous 2 states so that when we want to popState the data is there to do so. This could be extended to be a full session history in the future if we needed to do so.

I've run all tests with gUseInContentUI false and they all pass now, I've been trying to figure out an easy way to just make the whole test suite run twice so that we can keep that the case.
Attachment #478303 - Flags: review?(bmcbride)
Status: NEW → ASSIGNED
Whiteboard: [has patch][needs review Unfocused]
Comment on attachment 478303 [details] [diff] [review]
patch rev 1

>-window.addEventListener("load",  initialize, false);
...
>+document.addEventListener("load", initialize, true);

Curious: why this change?

>+    }
>+    else {

Style nit: Remove the newline.

Is there a separate bug on file for running tests with this in both a tab and a window?
Attachment #478303 - Flags: review?(bmcbride) → review+
Whiteboard: [has patch][needs review Unfocused] → [has patch]
(In reply to comment #24)
> Comment on attachment 478303 [details] [diff] [review]
> patch rev 1
> 
> >-window.addEventListener("load",  initialize, false);
> ...
> >+document.addEventListener("load", initialize, true);
> 
> Curious: why this change?

Oh yeah, so the test harness wasn't working properly with the add-ons manager opening in a new window. The load event listener in head.js was getting called before initialize. It seems that switching to a capturing document load listener makes initialize get called earlier than anything registered on the window.

> >+    }
> >+    else {
> 
> Style nit: Remove the newline.
> 
> Is there a separate bug on file for running tests with this in both a tab and a
> window?

Files bug 599891
Whiteboard: [has patch] → [has patch][needs-checkin-post-b7]
Fixed: http://hg.mozilla.org/mozilla-central/rev/a8bf9ed4846d
Status: ASSIGNED → RESOLVED
Closed: 9 years ago
Flags: in-testsuite+
Flags: in-litmus-
Resolution: --- → FIXED
Whiteboard: [has patch][needs-checkin-post-b7]
Target Milestone: --- → mozilla2.0b8
Ludovic, can you please verify this fix with Thunderbird? Thanks.
(In reply to comment #27)
> Ludovic, can you please verify this fix with Thunderbird? Thanks.

We can't open the add-on manager in a window in Thunderbird it always opens in a tab.
Status: RESOLVED → VERIFIED
Target Milestone: mozilla2.0b8 → mozilla2.0b7
> It seems that switching to a capturing document load listener

There are no load events on documents.

This capturing listener is firing whenever anything in the page loads.  In particular, it seems to fire when the first <xul:image> in the document finishes loading.

I'm going to add a hack to this code in bug 185236 to avoid also firing on stylesheet loads, but this code just looks wrong to me...
You need to log in before you can comment on or make changes to this bug.