exo: Add support for alpha_compositing interface to wayland bindings.

This makes it possible for a client to specify a blend equation and
an alpha value that will be applied to the whole surface.

BUG=549781,610086
TEST=exo_unittests --gtest_filter=SurfaceTest.*

Review-Url: https://codereview.chromium.org/1962473002
Cr-Commit-Position: refs/heads/master@{#392733}
diff --git a/components/exo/surface.h b/components/exo/surface.h
index 1bbb264..417dba4 100644
--- a/components/exo/surface.h
+++ b/components/exo/surface.h
@@ -14,6 +14,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
 #include "third_party/skia/include/core/SkRegion.h"
+#include "third_party/skia/include/core/SkXfermode.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_observer.h"
 #include "ui/compositor/compositor_observer.h"
@@ -88,6 +89,12 @@
   // appearing in screenshots or from being viewed on non-secure displays.
   void SetOnlyVisibleOnSecureOutput(bool only_visible_on_secure_output);
 
+  // This sets the blend mode that will be used when drawing the surface.
+  void SetBlendMode(SkXfermode::Mode blend_mode);
+
+  // This sets the alpha value that will be applied to the whole surface.
+  void SetAlpha(float alpha);
+
   // Surface state (damage regions, attached buffers, etc.) is double-buffered.
   // A Commit() call atomically applies all pending state, replacing the
   // current state. Commit() is not guaranteed to be synchronous. See
@@ -198,6 +205,12 @@
   // The secure output visibility state to take effect when Commit() is called.
   bool pending_only_visible_on_secure_output_;
 
+  // The blend mode state to take effect when Commit() is called.
+  SkXfermode::Mode pending_blend_mode_;
+
+  // The alpha state to take effect when Commit() is called.
+  float pending_alpha_;
+
   // The buffer that is currently set as content of surface.
   base::WeakPtr<Buffer> current_buffer_;