Introduce WMEvent class
* Moved out SnapEdge enum from SnapSizer class
* Moved SnapWindow logic completely inside DefaultState
* Further simplified the bounds calculation for snapped window.

BUG=318325

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@254922 0039d316-1c4b-4281-b951-d872f2087c98
WebContents exits fullscreen on RenderViewHost swaps, navigations, and crashes.

Normally, swaps/navigations would not occur during a tab fullscreen session, since this is usually a user-initiated procedure.  However, with the new fullscreen-within-tab feature, this is now a possibility.  In addition, renderer crashes could leave the UI in an inconsistent full-screened state.

BUG=347232

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

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