I was investigating an assert I was seeing in the new InfoBar system,
and I noticed this interesting condition:

When a window is WM_NCDESTROYed, its focus manager is shut down,
however the view hierarchy of that window isn't destroyed until the
WidgetWin is deleted (in OnFinalMessage).

There are cases where the destructors of various views attempt to
manipulate the focus manager, but in this case the focus manager is
gone, hence the assert.

Then I noticed code in BrowserView::TabDetachedAt that works around
this problem for the TabContentsContainerView by forcing the focus
manager tweaking to be done at a point in time before WM_NCDESTROY
occurs. So as a quick fix I put logic for the InfoBars in there too.

But this got me to thinking that this is a general weakness of the
views system and this problem could crop up in other places, where
they may not be such an easy workaround as my change. So I am
proposing we delete the RootView in WidgetWin::OnDestroy or when
handling WM_NCDESTROY but before the focus manager is destroyed,
rather than wait until the WidgetWin is deleted.

I would tend to prefer OnDestroy, since it feels less ad-hoc, though
is it possible for a window to receive any messages after WM_DESTROY
and before WM_NCDESTROY? If so, I'd tend to want to put the
destruction in the WM_NCDESTROY handler just to be on the safe side.

What do you think?

-Ben

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Chromium-dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/chromium-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to