Reland r242290, r241609, r242134.

I had reverted them speculatively (in r242297, r242298, r242299) hoping
to fix a browser_tests issue on chromeos, but the reverts of these CLs didn't
help.

BUG=none
TBR=guohui@chromium.org

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@242333 0039d316-1c4b-4281-b951-d872f2087c98
SVN changes up to revision 242333