ash: Add launcher overflow bubble.

- Host a LauncherView in bubble to display overflown items;
- Mouse wheel and two-finger scroll to scroll the LauncherView in bubble in case overflow bubble is overflown;
- Fit bubble when items are added/removed;
- Keep launcher bar on screen when the bubble is shown;

BUG=128054
TEST=Verify launcher overflown items are in a bubble instead of menu.


Review URL: https://chromiumcodereview.appspot.com/10659003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@146460 0039d316-1c4b-4281-b951-d872f2087c98
gfx::Rect ShelfLayoutManager::GetUnmaximizedWorkAreaBounds(
    aura::Window* window) {
  gfx::Rect bounds(gfx::Screen::GetDisplayNearestWindow(window).bounds());
  int size;
  if (auto_hide_behavior_ == SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS) {
    size = kAutoHideSize;
  } else {
    int width, height;
    GetShelfSize(&width, &height);
    size = std::max(width, height);
  }
  AdjustBoundsBasedOnAlignment(size, &bounds);
  return bounds;
}

gfx::Rect ShelfLayoutManager::GetUnmaximizedWorkAreaBounds(
    aura::Window* window) {
  gfx::Rect bounds(gfx::Screen::GetDisplayNearestWindow(window).bounds());
  int size;
  if (auto_hide_behavior_ == SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS) {
    size = kAutoHideSize;
  } else {
    int width, height;
    GetShelfSize(&width, &height);
    size = std::max(width, height);
  }
  AdjustBoundsBasedOnAlignment(size, &bounds);
  return bounds;
}
