aura: Draw drop shadows under browsers and menus.

This is largely a port of the existing X window manager's
code for drawing shadows around windows.  It adds an
ImageGrid class for drawing a scaled 3x3 grid of gfx::Images
and a Shadow class (managed by aura_shell::ShadowController)
that uses ImageGrid to draw a shadow.  Shadows can be
disabled via --aura-no-shadows.

BUG=101977
TEST=added unit tests; also manually checked that shadows get drawn

Review URL: http://codereview.chromium.org/8555025

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@111009 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/ui/aura_shell/shell.h b/ui/aura_shell/shell.h
index fd0d596..3f4e3ac 100644
--- a/ui/aura_shell/shell.h
+++ b/ui/aura_shell/shell.h
@@ -31,6 +31,7 @@
 
 namespace internal {
 class DragDropController;
+class ShadowController;
 class ShelfLayoutController;
 class WorkspaceController;
 }
@@ -64,6 +65,11 @@
   ShellDelegate* delegate() { return delegate_.get(); }
   Launcher* launcher() { return launcher_.get(); }
 
+  // Made available for tests.
+  internal::ShadowController* shadow_controller() {
+    return shadow_controller_.get();
+  }
+
  private:
   typedef std::pair<aura::Window*, gfx::Rect> WindowAndBoundsPair;
 
@@ -88,6 +94,7 @@
   scoped_ptr<internal::DragDropController> drag_drop_controller_;
   scoped_ptr<internal::WorkspaceController> workspace_controller_;
   scoped_ptr<internal::ShelfLayoutController> shelf_layout_controller_;
+  scoped_ptr<internal::ShadowController> shadow_controller_;
 
   DISALLOW_COPY_AND_ASSIGN(Shell);
 };