Fix multiple problems with omnibox text handling across focus changes.
commit08726d5e5b587c1c11e7950f5ebbafbb3843359a
authorpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Tue, 24 Sep 2013 21:52:55 +0000 (24 21:52 +0000)
committerpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Tue, 24 Sep 2013 21:52:55 +0000 (24 21:52 +0000)
tree08c9994235f6c57a96738ae6deb10ddffbd8f333
parentb1cb7816e9a664846857f1eeecd44b24947187df
Fix multiple problems with omnibox text handling across focus changes.
(1) RenderText was drawing unfocused selections with the non-selection
    background color, but the selected text color, leading to white-on-white
    text.  Fix by drawing unfocused selected text as unselected.
(2) OmniboxViewViews was preserving selections across focus changes using
    SaveStateToTab(), leading to problems when something about the omnibox state
    changed after the omnibox was unfocused -- a later state restoration would
    restore a selection model that no longer lined up with the rest of the
    omnibox state (e.g. the current text).  Fix by tracking selection across
    focus changes in the same way OmniboxViewWin does.
(3) On tab changes, OnTabChanged() could be followed by an OnBlur()/OnFocus()
    call if changing from a tab where the omnibox was focused to one where it
    wasn't (or vice versa).  This led to the selection state being stomped.
    Fixed by making Browser give BrowserWindow first crack at handling the tab
    change.  This makes tabbing out of the omnibox, changing tabs away and back,
    and tabbing back in correctly restore the selection even when changing
    between tabs that disagree about whether the omnibox is focused.

BUG=293258
TEST=Following steps in bug comment 0 does not result in invisible text
R=msw@chromium.org, shess@chromium.org, sky@chromium.org

Review URL: https://codereview.chromium.org/23536075

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@225074 0039d316-1c4b-4281-b951-d872f2087c98
12 files changed:
chrome/browser/ui/browser.cc
chrome/browser/ui/browser_window.h
chrome/browser/ui/cocoa/browser_window_cocoa.h
chrome/browser/ui/cocoa/browser_window_cocoa.mm
chrome/browser/ui/gtk/browser_window_gtk.cc
chrome/browser/ui/gtk/browser_window_gtk.h
chrome/browser/ui/views/frame/browser_view.cc
chrome/browser/ui/views/frame/browser_view.h
chrome/browser/ui/views/omnibox/omnibox_view_views.cc
chrome/browser/ui/views/omnibox/omnibox_view_views.h
chrome/test/base/test_browser_window.h
ui/gfx/render_text.cc