Merge from Chromium at DEPS revision r202854

This commit was generated by merge_to_master.py.

Change-Id: Idca323f71ef844a9e04f454d4f070b1e398f2deb
diff --git a/webkit/renderer/compositor_bindings/DEPS b/webkit/renderer/compositor_bindings/DEPS
new file mode 100644
index 0000000..c3a5b96
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+media",
+]
diff --git a/webkit/renderer/compositor_bindings/OWNERS b/webkit/renderer/compositor_bindings/OWNERS
new file mode 100644
index 0000000..d42bb39
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/OWNERS
@@ -0,0 +1,2 @@
+enne@chromium.org
+nduca@chromium.org
diff --git a/webkit/renderer/compositor_bindings/PRESUBMIT.py b/webkit/renderer/compositor_bindings/PRESUBMIT.py
new file mode 100644
index 0000000..4c2c1f9
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/PRESUBMIT.py
@@ -0,0 +1,33 @@
+# Copyright (c) 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
+details on the presubmit API built into gcl.
+"""
+
+SOURCE_FILES = (r'^.*\.(cc|h)$')
+
+def CheckChangeLintsClean(input_api, output_api):
+  input_api.cpplint._cpplint_state.ResetErrorCounts()  # reset global state
+  source_filter = lambda x: input_api.FilterSourceFile(
+    x, white_list=SOURCE_FILES, black_list=None)
+  files = [f.AbsoluteLocalPath() for f in
+           input_api.AffectedSourceFiles(source_filter)]
+  level = 1  # strict, but just warn
+
+  for file_name in files:
+    input_api.cpplint.ProcessFile(file_name, level)
+
+  if not input_api.cpplint._cpplint_state.error_count:
+    return []
+
+  return [output_api.PresubmitPromptWarning(
+    'Changelist failed cpplint.py check.')]
+
+
+def CheckChangeOnUpload(input_api, output_api):
+  results = []
+  results += CheckChangeLintsClean(input_api, output_api)
+  return results
diff --git a/webkit/renderer/compositor_bindings/compositor_bindings.gyp b/webkit/renderer/compositor_bindings/compositor_bindings.gyp
new file mode 100644
index 0000000..33f93c6
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/compositor_bindings.gyp
@@ -0,0 +1,79 @@
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+  'variables': {
+    'chromium_code': 1,
+    'webkit_compositor_bindings_sources': [
+      'scrollbar_impl.cc',
+      'scrollbar_impl.h',
+      'web_animation_curve_common.cc',
+      'web_animation_curve_common.h',
+      'web_animation_impl.cc',
+      'web_animation_impl.h',
+      'web_compositing_reasons.cc',
+      'web_content_layer_impl.cc',
+      'web_content_layer_impl.h',
+      'web_external_texture_layer_impl.cc',
+      'web_external_texture_layer_impl.h',
+      'web_float_animation_curve_impl.cc',
+      'web_float_animation_curve_impl.h',
+      'web_image_layer_impl.cc',
+      'web_image_layer_impl.h',
+      'web_layer_impl.cc',
+      'web_layer_impl.h',
+      'web_layer_impl_fixed_bounds.cc',
+      'web_layer_impl_fixed_bounds.h',
+      'web_to_ccscrollbar_theme_painter_adapter.cc',
+      'web_to_ccscrollbar_theme_painter_adapter.h',
+      'web_scrollbar_layer_impl.cc',
+      'web_scrollbar_layer_impl.h',
+      'web_solid_color_layer_impl.cc',
+      'web_solid_color_layer_impl.h',
+      'web_transform_operations_impl.cc',
+      'web_transform_operations_impl.h',
+      'web_transform_animation_curve_impl.cc',
+      'web_transform_animation_curve_impl.h',
+    ],
+  },
+  'targets': [
+    {
+      'target_name': 'webkit_compositor_support',
+      'type': 'static_library',
+      'dependencies': [
+        '<(DEPTH)/skia/skia.gyp:skia',
+        '<(DEPTH)/cc/cc.gyp:cc',
+        'webkit_compositor_bindings',
+      ],
+      'sources': [
+        'web_compositor_support_impl.cc',
+        'web_compositor_support_impl.h',
+      ],
+      'include_dirs': [
+        '../..',
+        '<(SHARED_INTERMEDIATE_DIR)/webkit',
+      ],
+    },
+    {
+      'target_name': 'webkit_compositor_bindings',
+      'type': '<(component)',
+      'dependencies': [
+        '<(DEPTH)/base/base.gyp:base',
+        '<(DEPTH)/cc/cc.gyp:cc',
+        '<(DEPTH)/gpu/gpu.gyp:gpu',
+        '<(DEPTH)/media/media.gyp:media',
+        '<(DEPTH)/skia/skia.gyp:skia',
+        '<(DEPTH)/third_party/WebKit/Source/WebKit/chromium/WebKit.gyp:webkit',
+        '<(DEPTH)/ui/ui.gyp:ui',
+        '<(DEPTH)/webkit/common/gpu/webkit_gpu.gyp:webkit_gpu',
+      ],
+      'sources': [
+        '<@(webkit_compositor_bindings_sources)',
+      ],
+      'defines': [
+        'WEBKIT_COMPOSITOR_BINDINGS_IMPLEMENTATION=1'
+      ]
+    },
+  ],
+}
diff --git a/webkit/renderer/compositor_bindings/compositor_bindings_tests.gyp b/webkit/renderer/compositor_bindings/compositor_bindings_tests.gyp
new file mode 100644
index 0000000..9c5018e
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/compositor_bindings_tests.gyp
@@ -0,0 +1,72 @@
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+  'variables': {
+    'chromium_code': 1,
+    'webkit_compositor_bindings_tests_sources': [
+      'web_animation_unittest.cc',
+      'web_float_animation_curve_unittest.cc',
+      'web_layer_impl_fixed_bounds_unittest.cc',
+    ],
+  },
+  'targets': [
+    {
+      'target_name': 'webkit_compositor_bindings_unittests',
+      'type' : '<(gtest_target_type)',
+      'dependencies': [
+        '<(DEPTH)/base/base.gyp:test_support_base',
+        '<(DEPTH)/cc/cc.gyp:cc',
+        '<(DEPTH)/cc/cc_tests.gyp:cc_test_support',
+        '<(DEPTH)/skia/skia.gyp:skia',
+        '<(DEPTH)/testing/gmock.gyp:gmock',
+        '<(DEPTH)/testing/gtest.gyp:gtest',
+        'compositor_bindings.gyp:webkit_compositor_bindings',
+      ],
+      'sources': [
+        '<@(webkit_compositor_bindings_tests_sources)',
+        'test/run_all_unittests.cc',
+      ],
+      'include_dirs': [
+        '<(DEPTH)'
+      ],
+      'conditions': [
+        ['OS == "android" and gtest_target_type == "shared_library"', {
+          'dependencies': [
+            '<(DEPTH)/testing/android/native_test.gyp:native_test_native_code',
+          ],
+        }],
+        [ 'os_posix == 1 and OS != "mac" and OS != "android" and OS != "ios"', {
+          'conditions': [
+            [ 'linux_use_tcmalloc==1', {
+              'dependencies': [
+                '<(DEPTH)/base/allocator/allocator.gyp:allocator',
+              ],
+            }],
+          ],
+        }],
+      ],
+    },
+  ],
+  'conditions': [
+    # Special target to wrap a gtest_target_type==shared_library
+    # package webkit_compositor_bindings_unittests into an android apk for execution.
+    ['OS == "android" and gtest_target_type == "shared_library"', {
+      'targets': [
+        {
+          'target_name': 'webkit_compositor_bindings_unittests_apk',
+          'type': 'none',
+          'dependencies': [
+            'webkit_compositor_bindings_unittests',
+          ],
+          'variables': {
+            'test_suite_name': 'webkit_compositor_bindings_unittests',
+            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)webkit_compositor_bindings_unittests<(SHARED_LIB_SUFFIX)',
+          },
+          'includes': [ '../../../build/apk_test.gypi' ],
+        },
+      ],
+    }],
+  ],
+}
diff --git a/webkit/renderer/compositor_bindings/scrollbar_impl.cc b/webkit/renderer/compositor_bindings/scrollbar_impl.cc
new file mode 100644
index 0000000..e8d2764
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/scrollbar_impl.cc
@@ -0,0 +1,102 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/compositor_bindings/scrollbar_impl.h"
+
+#include "base/logging.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebScrollbar.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebScrollbarThemeGeometry.h"
+
+using WebKit::WebScrollbar;
+
+namespace webkit {
+
+ScrollbarImpl::ScrollbarImpl(
+    scoped_ptr<WebScrollbar> scrollbar,
+    WebKit::WebScrollbarThemePainter painter,
+    scoped_ptr<WebKit::WebScrollbarThemeGeometry> geometry)
+    : scrollbar_(scrollbar.Pass()),
+      painter_(painter),
+      geometry_(geometry.Pass()) {}
+
+ScrollbarImpl::~ScrollbarImpl() {}
+
+cc::ScrollbarOrientation ScrollbarImpl::Orientation() const {
+  if (scrollbar_->orientation() == WebScrollbar::Horizontal)
+    return cc::HORIZONTAL;
+  return cc::VERTICAL;
+}
+
+bool ScrollbarImpl::HasThumb() const {
+  return geometry_->hasThumb(scrollbar_.get());
+}
+
+bool ScrollbarImpl::IsOverlay() const {
+  return scrollbar_->isOverlay();
+}
+
+gfx::Point ScrollbarImpl::Location() const {
+  return scrollbar_->location();
+}
+
+int ScrollbarImpl::ThumbThickness() const {
+  gfx::Rect thumb_rect = geometry_->thumbRect(scrollbar_.get());
+  if (scrollbar_->orientation() == WebScrollbar::Horizontal)
+    return thumb_rect.height();
+  return thumb_rect.width();
+}
+
+int ScrollbarImpl::ThumbLength() const {
+  gfx::Rect thumb_rect = geometry_->thumbRect(scrollbar_.get());
+  if (scrollbar_->orientation() == WebScrollbar::Horizontal)
+    return thumb_rect.width();
+  return thumb_rect.height();
+}
+
+gfx::Rect ScrollbarImpl::TrackRect() const {
+  return geometry_->trackRect(scrollbar_.get());
+}
+
+void ScrollbarImpl::PaintPart(
+    SkCanvas* canvas, cc::ScrollbarPart part, gfx::Rect content_rect) {
+  if (part == cc::THUMB) {
+    painter_.paintThumb(canvas, content_rect);
+    return;
+  }
+
+  // The following is a simplification of ScrollbarThemeComposite::paint.
+  painter_.paintScrollbarBackground(canvas, content_rect);
+
+  if (geometry_->hasButtons(scrollbar_.get())) {
+    gfx::Rect back_button_start_paint_rect =
+        geometry_->backButtonStartRect(scrollbar_.get());
+    painter_.paintBackButtonStart(canvas, back_button_start_paint_rect);
+
+    gfx::Rect back_button_end_paint_rect =
+        geometry_->backButtonEndRect(scrollbar_.get());
+    painter_.paintBackButtonEnd(canvas, back_button_end_paint_rect);
+
+    gfx::Rect forward_button_start_paint_rect =
+        geometry_->forwardButtonStartRect(scrollbar_.get());
+    painter_.paintForwardButtonStart(canvas,
+                                      forward_button_start_paint_rect);
+
+    gfx::Rect forward_button_end_paint_rect =
+        geometry_->forwardButtonEndRect(scrollbar_.get());
+    painter_.paintForwardButtonEnd(canvas, forward_button_end_paint_rect);
+  }
+
+  gfx::Rect track_paint_rect = geometry_->trackRect(scrollbar_.get());
+  painter_.paintTrackBackground(canvas, track_paint_rect);
+
+  bool thumb_present = geometry_->hasThumb(scrollbar_.get());
+  if (thumb_present) {
+    painter_.paintForwardTrackPart(canvas, track_paint_rect);
+    painter_.paintBackTrackPart(canvas, track_paint_rect);
+  }
+
+  painter_.paintTickmarks(canvas, track_paint_rect);
+}
+
+}  // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/scrollbar_impl.h b/webkit/renderer/compositor_bindings/scrollbar_impl.h
new file mode 100644
index 0000000..8f35a08
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/scrollbar_impl.h
@@ -0,0 +1,49 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_SCROLLBAR_IMPL_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_SCROLLBAR_IMPL_H_
+
+#include "base/basictypes.h"
+#include "base/memory/scoped_ptr.h"
+#include "cc/input/scrollbar.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebScrollbarThemePainter.h"
+
+namespace WebKit {
+class WebScrollbar;
+class WebScrollbarThemeGeometry;
+}
+
+namespace webkit {
+
+class ScrollbarImpl : public cc::Scrollbar {
+ public:
+  ScrollbarImpl(scoped_ptr<WebKit::WebScrollbar> scrollbar,
+                WebKit::WebScrollbarThemePainter painter,
+                scoped_ptr<WebKit::WebScrollbarThemeGeometry> geometry);
+  virtual ~ScrollbarImpl();
+
+  // cc::Scrollbar implementation.
+  virtual cc::ScrollbarOrientation Orientation() const OVERRIDE;
+  virtual bool HasThumb() const OVERRIDE;
+  virtual bool IsOverlay() const OVERRIDE;
+  virtual gfx::Point Location() const OVERRIDE;
+  virtual int ThumbThickness() const OVERRIDE;
+  virtual int ThumbLength() const OVERRIDE;
+  virtual gfx::Rect TrackRect() const OVERRIDE;
+  virtual void PaintPart(SkCanvas* canvas,
+                         cc::ScrollbarPart part,
+                         gfx::Rect content_rect) OVERRIDE;
+
+ private:
+  scoped_ptr<WebKit::WebScrollbar> scrollbar_;
+  WebKit::WebScrollbarThemePainter painter_;
+  scoped_ptr<WebKit::WebScrollbarThemeGeometry> geometry_;
+
+  DISALLOW_COPY_AND_ASSIGN(ScrollbarImpl);
+};
+
+}  // namespace webkit
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_SCROLLBAR_IMPL_H_
diff --git a/webkit/renderer/compositor_bindings/test/run_all_unittests.cc b/webkit/renderer/compositor_bindings/test/run_all_unittests.cc
new file mode 100644
index 0000000..b6a7105
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/test/run_all_unittests.cc
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/message_loop.h"
+#include "base/test/test_suite.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+int main(int argc, char** argv) {
+  ::testing::InitGoogleMock(&argc, argv);
+  TestSuite test_suite(argc, argv);
+  base::MessageLoop message_loop;
+  int result = test_suite.Run();
+
+  return result;
+}
diff --git a/webkit/renderer/compositor_bindings/web_animation_curve_common.cc b/webkit/renderer/compositor_bindings/web_animation_curve_common.cc
new file mode 100644
index 0000000..7a35602
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_animation_curve_common.cc
@@ -0,0 +1,28 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/compositor_bindings/web_animation_curve_common.h"
+
+#include "cc/animation/timing_function.h"
+
+namespace webkit {
+
+scoped_ptr<cc::TimingFunction> CreateTimingFunction(
+    WebKit::WebAnimationCurve::TimingFunctionType type) {
+  switch (type) {
+    case WebKit::WebAnimationCurve::TimingFunctionTypeEase:
+      return cc::EaseTimingFunction::Create();
+    case WebKit::WebAnimationCurve::TimingFunctionTypeEaseIn:
+      return cc::EaseInTimingFunction::Create();
+    case WebKit::WebAnimationCurve::TimingFunctionTypeEaseOut:
+      return cc::EaseOutTimingFunction::Create();
+    case WebKit::WebAnimationCurve::TimingFunctionTypeEaseInOut:
+      return cc::EaseInOutTimingFunction::Create();
+    case WebKit::WebAnimationCurve::TimingFunctionTypeLinear:
+      return scoped_ptr<cc::TimingFunction>();
+  }
+  return scoped_ptr<cc::TimingFunction>();
+}
+
+}  // namespace WebKit
diff --git a/webkit/renderer/compositor_bindings/web_animation_curve_common.h b/webkit/renderer/compositor_bindings/web_animation_curve_common.h
new file mode 100644
index 0000000..a8c39d0
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_animation_curve_common.h
@@ -0,0 +1,18 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_ANIMATION_CURVE_COMMON_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_ANIMATION_CURVE_COMMON_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebAnimationCurve.h"
+
+namespace cc { class TimingFunction; }
+
+namespace webkit {
+scoped_ptr<cc::TimingFunction> CreateTimingFunction(
+    WebKit::WebAnimationCurve::TimingFunctionType);
+}
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_ANIMATION_CURVE_COMMON_H_
diff --git a/webkit/renderer/compositor_bindings/web_animation_impl.cc b/webkit/renderer/compositor_bindings/web_animation_impl.cc
new file mode 100644
index 0000000..59d8f8b
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_animation_impl.cc
@@ -0,0 +1,96 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/compositor_bindings/web_animation_impl.h"
+
+#include "cc/animation/animation.h"
+#include "cc/animation/animation_curve.h"
+#include "cc/animation/animation_id_provider.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebAnimation.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebAnimationCurve.h"
+#include "webkit/renderer/compositor_bindings/web_float_animation_curve_impl.h"
+#include "webkit/renderer/compositor_bindings/web_transform_animation_curve_impl.h"
+
+using cc::Animation;
+using cc::AnimationIdProvider;
+
+using WebKit::WebAnimationCurve;
+
+namespace webkit {
+
+WebAnimationImpl::WebAnimationImpl(const WebAnimationCurve& web_curve,
+                                   TargetProperty target_property,
+                                   int animation_id,
+                                   int group_id) {
+  if (!animation_id)
+    animation_id = AnimationIdProvider::NextAnimationId();
+  if (!group_id)
+    group_id = AnimationIdProvider::NextGroupId();
+
+  WebAnimationCurve::AnimationCurveType curve_type = web_curve.type();
+  scoped_ptr<cc::AnimationCurve> curve;
+  switch (curve_type) {
+    case WebAnimationCurve::AnimationCurveTypeFloat: {
+      const WebFloatAnimationCurveImpl* float_curve_impl =
+          static_cast<const WebFloatAnimationCurveImpl*>(&web_curve);
+      curve = float_curve_impl->CloneToAnimationCurve();
+      break;
+    }
+    case WebAnimationCurve::AnimationCurveTypeTransform: {
+      const WebTransformAnimationCurveImpl* transform_curve_impl =
+          static_cast<const WebTransformAnimationCurveImpl*>(&web_curve);
+      curve = transform_curve_impl->CloneToAnimationCurve();
+      break;
+    }
+  }
+  animation_ = Animation::Create(
+      curve.Pass(),
+      animation_id,
+      group_id,
+      static_cast<cc::Animation::TargetProperty>(target_property));
+}
+
+WebAnimationImpl::~WebAnimationImpl() {}
+
+int WebAnimationImpl::id() { return animation_->id(); }
+
+WebKit::WebAnimation::TargetProperty WebAnimationImpl::targetProperty() const {
+  return static_cast<WebAnimationImpl::TargetProperty>(
+      animation_->target_property());
+}
+
+int WebAnimationImpl::iterations() const { return animation_->iterations(); }
+
+void WebAnimationImpl::setIterations(int n) { animation_->set_iterations(n); }
+
+double WebAnimationImpl::startTime() const { return animation_->start_time(); }
+
+void WebAnimationImpl::setStartTime(double monotonic_time) {
+  animation_->set_start_time(monotonic_time);
+}
+
+double WebAnimationImpl::timeOffset() const {
+  return animation_->time_offset();
+}
+
+void WebAnimationImpl::setTimeOffset(double monotonic_time) {
+  animation_->set_time_offset(monotonic_time);
+}
+
+bool WebAnimationImpl::alternatesDirection() const {
+  return animation_->alternates_direction();
+}
+
+void WebAnimationImpl::setAlternatesDirection(bool alternates) {
+  animation_->set_alternates_direction(alternates);
+}
+
+scoped_ptr<cc::Animation> WebAnimationImpl::CloneToAnimation() {
+  scoped_ptr<cc::Animation> to_return(
+      animation_->Clone(cc::Animation::NonControllingInstance));
+  to_return->set_needs_synchronized_start_time(true);
+  return to_return.Pass();
+}
+
+}  // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/web_animation_impl.h b/webkit/renderer/compositor_bindings/web_animation_impl.h
new file mode 100644
index 0000000..b343833
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_animation_impl.h
@@ -0,0 +1,49 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_ANIMATION_IMPL_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_ANIMATION_IMPL_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebAnimation.h"
+#include "webkit/renderer/compositor_bindings/webkit_compositor_bindings_export.h"
+
+namespace cc { class Animation; }
+
+namespace WebKit { class WebAnimationCurve; }
+
+namespace webkit {
+
+class WebAnimationImpl : public WebKit::WebAnimation {
+ public:
+  WEBKIT_COMPOSITOR_BINDINGS_EXPORT WebAnimationImpl(
+      const WebKit::WebAnimationCurve& curve,
+      TargetProperty target,
+      int animation_id,
+      int group_id);
+  virtual ~WebAnimationImpl();
+
+  // WebKit::WebAnimation implementation
+  virtual int id();
+  virtual TargetProperty targetProperty() const;
+  virtual int iterations() const;
+  virtual void setIterations(int iterations);
+  virtual double startTime() const;
+  virtual void setStartTime(double monotonic_time);
+  virtual double timeOffset() const;
+  virtual void setTimeOffset(double monotonic_time);
+  virtual bool alternatesDirection() const;
+  virtual void setAlternatesDirection(bool alternates);
+
+  scoped_ptr<cc::Animation> CloneToAnimation();
+
+ private:
+  scoped_ptr<cc::Animation> animation_;
+
+  DISALLOW_COPY_AND_ASSIGN(WebAnimationImpl);
+};
+
+}  // namespace webkit
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_ANIMATION_IMPL_H_
diff --git a/webkit/renderer/compositor_bindings/web_animation_unittest.cc b/webkit/renderer/compositor_bindings/web_animation_unittest.cc
new file mode 100644
index 0000000..520d909
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_animation_unittest.cc
@@ -0,0 +1,45 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/memory/scoped_ptr.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "webkit/renderer/compositor_bindings/web_animation_impl.h"
+#include "webkit/renderer/compositor_bindings/web_float_animation_curve_impl.h"
+
+using WebKit::WebAnimation;
+using WebKit::WebAnimationCurve;
+using WebKit::WebFloatAnimationCurve;
+
+namespace webkit {
+namespace {
+
+TEST(WebAnimationTest, DefaultSettings) {
+  scoped_ptr<WebAnimationCurve> curve(new WebFloatAnimationCurveImpl());
+  scoped_ptr<WebAnimation> animation(
+      new WebAnimationImpl(*curve, WebAnimation::TargetPropertyOpacity, 1, 0));
+
+  // Ensure that the defaults are correct.
+  EXPECT_EQ(1, animation->iterations());
+  EXPECT_EQ(0, animation->startTime());
+  EXPECT_EQ(0, animation->timeOffset());
+  EXPECT_FALSE(animation->alternatesDirection());
+}
+
+TEST(WebAnimationTest, ModifiedSettings) {
+  scoped_ptr<WebFloatAnimationCurve> curve(new WebFloatAnimationCurveImpl());
+  scoped_ptr<WebAnimation> animation(
+      new WebAnimationImpl(*curve, WebAnimation::TargetPropertyOpacity, 1, 0));
+  animation->setIterations(2);
+  animation->setStartTime(2);
+  animation->setTimeOffset(2);
+  animation->setAlternatesDirection(true);
+
+  EXPECT_EQ(2, animation->iterations());
+  EXPECT_EQ(2, animation->startTime());
+  EXPECT_EQ(2, animation->timeOffset());
+  EXPECT_TRUE(animation->alternatesDirection());
+}
+
+}  // namespace
+}  // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/web_compositing_reasons.cc b/webkit/renderer/compositor_bindings/web_compositing_reasons.cc
new file mode 100644
index 0000000..0e04a24
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_compositing_reasons.cc
@@ -0,0 +1,144 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/basictypes.h"
+#include "cc/layers/compositing_reasons.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebCompositingReasons.h"
+
+#define COMPILE_ASSERT_MATCHING_ENUMS(cc_name, webkit_name)             \
+    COMPILE_ASSERT(                                                     \
+        static_cast<int>(cc_name) == static_cast<int>(webkit_name),     \
+        mismatching_enums)
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonUnknown,
+    WebKit::CompositingReasonUnknown);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReason3DTransform,
+    WebKit::CompositingReason3DTransform);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonVideo,
+    WebKit::CompositingReasonVideo);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonCanvas,
+    WebKit::CompositingReasonCanvas);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonPlugin,
+    WebKit::CompositingReasonPlugin);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonIFrame,
+    WebKit::CompositingReasonIFrame);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonBackfaceVisibilityHidden,
+    WebKit::CompositingReasonBackfaceVisibilityHidden);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonAnimation,
+    WebKit::CompositingReasonAnimation);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonFilters,
+    WebKit::CompositingReasonFilters);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonPositionFixed,
+    WebKit::CompositingReasonPositionFixed);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonPositionSticky,
+    WebKit::CompositingReasonPositionSticky);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonOverflowScrollingTouch,
+    WebKit::CompositingReasonOverflowScrollingTouch);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonBlending,
+    WebKit::CompositingReasonBlending);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonAssumedOverlap,
+    WebKit::CompositingReasonAssumedOverlap);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonOverlap,
+    WebKit::CompositingReasonOverlap);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonNegativeZIndexChildren,
+    WebKit::CompositingReasonNegativeZIndexChildren);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonTransformWithCompositedDescendants,
+    WebKit::CompositingReasonTransformWithCompositedDescendants);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonOpacityWithCompositedDescendants,
+    WebKit::CompositingReasonOpacityWithCompositedDescendants);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonMaskWithCompositedDescendants,
+    WebKit::CompositingReasonMaskWithCompositedDescendants);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonReflectionWithCompositedDescendants,
+    WebKit::CompositingReasonReflectionWithCompositedDescendants);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonFilterWithCompositedDescendants,
+    WebKit::CompositingReasonFilterWithCompositedDescendants);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonBlendingWithCompositedDescendants,
+    WebKit::CompositingReasonBlendingWithCompositedDescendants);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonClipsCompositingDescendants,
+    WebKit::CompositingReasonClipsCompositingDescendants);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonPerspective,
+    WebKit::CompositingReasonPerspective);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonPreserve3D,
+    WebKit::CompositingReasonPreserve3D);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonReflectionOfCompositedParent,
+    WebKit::CompositingReasonReflectionOfCompositedParent);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonRoot,
+    WebKit::CompositingReasonRoot);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonLayerForClip,
+    WebKit::CompositingReasonLayerForClip);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonLayerForScrollbar,
+    WebKit::CompositingReasonLayerForScrollbar);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonLayerForScrollingContainer,
+    WebKit::CompositingReasonLayerForScrollingContainer);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonLayerForForeground,
+    WebKit::CompositingReasonLayerForForeground);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonLayerForBackground,
+    WebKit::CompositingReasonLayerForBackground);
+
+COMPILE_ASSERT_MATCHING_ENUMS(
+    cc::kCompositingReasonLayerForMask,
+    WebKit::CompositingReasonLayerForMask);
diff --git a/webkit/renderer/compositor_bindings/web_compositor_support_impl.cc b/webkit/renderer/compositor_bindings/web_compositor_support_impl.cc
new file mode 100644
index 0000000..5eadb1f
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_compositor_support_impl.cc
@@ -0,0 +1,103 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/compositor_bindings/web_compositor_support_impl.h"
+
+#include "base/memory/scoped_ptr.h"
+#include "base/message_loop_proxy.h"
+#include "cc/animation/transform_operations.h"
+#include "cc/base/thread_impl.h"
+#include "cc/output/output_surface.h"
+#include "cc/output/software_output_device.h"
+#include "webkit/glue/webthread_impl.h"
+#include "webkit/renderer/compositor_bindings/web_animation_impl.h"
+#include "webkit/renderer/compositor_bindings/web_content_layer_impl.h"
+#include "webkit/renderer/compositor_bindings/web_external_texture_layer_impl.h"
+#include "webkit/renderer/compositor_bindings/web_float_animation_curve_impl.h"
+#include "webkit/renderer/compositor_bindings/web_image_layer_impl.h"
+#include "webkit/renderer/compositor_bindings/web_layer_impl.h"
+#include "webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.h"
+#include "webkit/renderer/compositor_bindings/web_solid_color_layer_impl.h"
+#include "webkit/renderer/compositor_bindings/web_transform_animation_curve_impl.h"
+#include "webkit/renderer/compositor_bindings/web_transform_operations_impl.h"
+
+using WebKit::WebAnimation;
+using WebKit::WebAnimationCurve;
+using WebKit::WebContentLayer;
+using WebKit::WebContentLayerClient;
+using WebKit::WebExternalTextureLayer;
+using WebKit::WebExternalTextureLayerClient;
+using WebKit::WebFloatAnimationCurve;
+using WebKit::WebImageLayer;
+using WebKit::WebLayer;
+using WebKit::WebScrollbar;
+using WebKit::WebScrollbarLayer;
+using WebKit::WebScrollbarThemeGeometry;
+using WebKit::WebScrollbarThemePainter;
+using WebKit::WebSolidColorLayer;
+using WebKit::WebTransformAnimationCurve;
+using WebKit::WebTransformOperations;
+
+namespace webkit {
+
+WebCompositorSupportImpl::WebCompositorSupportImpl() {}
+
+WebCompositorSupportImpl::~WebCompositorSupportImpl() {}
+
+WebLayer* WebCompositorSupportImpl::createLayer() {
+  return new WebLayerImpl();
+}
+
+WebContentLayer* WebCompositorSupportImpl::createContentLayer(
+    WebContentLayerClient* client) {
+  return new WebContentLayerImpl(client);
+}
+
+WebExternalTextureLayer* WebCompositorSupportImpl::createExternalTextureLayer(
+    WebExternalTextureLayerClient* client) {
+  return new WebExternalTextureLayerImpl(client, false);
+}
+
+WebExternalTextureLayer*
+WebCompositorSupportImpl::createExternalTextureLayerForMailbox(
+    WebExternalTextureLayerClient* client) {
+  return new WebExternalTextureLayerImpl(client, true);
+}
+
+WebKit::WebImageLayer* WebCompositorSupportImpl::createImageLayer() {
+  return new WebImageLayerImpl();
+}
+
+WebSolidColorLayer* WebCompositorSupportImpl::createSolidColorLayer() {
+  return new WebSolidColorLayerImpl();
+}
+
+WebScrollbarLayer* WebCompositorSupportImpl::createScrollbarLayer(
+    WebScrollbar* scrollbar,
+    WebScrollbarThemePainter painter,
+    WebScrollbarThemeGeometry* geometry) {
+  return new WebScrollbarLayerImpl(scrollbar, painter, geometry);
+}
+
+WebAnimation* WebCompositorSupportImpl::createAnimation(
+    const WebKit::WebAnimationCurve& curve,
+    WebKit::WebAnimation::TargetProperty target,
+    int animation_id) {
+  return new WebAnimationImpl(curve, target, animation_id, 0);
+}
+
+WebFloatAnimationCurve* WebCompositorSupportImpl::createFloatAnimationCurve() {
+  return new WebFloatAnimationCurveImpl();
+}
+
+WebTransformAnimationCurve*
+WebCompositorSupportImpl::createTransformAnimationCurve() {
+  return new WebTransformAnimationCurveImpl();
+}
+
+WebTransformOperations* WebCompositorSupportImpl::createTransformOperations() {
+  return new WebTransformOperationsImpl();
+}
+
+}  // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/web_compositor_support_impl.h b/webkit/renderer/compositor_bindings/web_compositor_support_impl.h
new file mode 100644
index 0000000..fb94711
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_compositor_support_impl.h
@@ -0,0 +1,53 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_COMPOSITOR_SUPPORT_IMPL_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_COMPOSITOR_SUPPORT_IMPL_H_
+
+#include "base/memory/ref_counted.h"
+#include "base/message_loop_proxy.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebCompositorSupport.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebLayer.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebTransformOperations.h"
+
+namespace WebKit {
+class WebGraphicsContext3D;
+}
+
+namespace webkit {
+
+class WebCompositorSupportImpl : public WebKit::WebCompositorSupport {
+ public:
+  WebCompositorSupportImpl();
+  virtual ~WebCompositorSupportImpl();
+
+  virtual WebKit::WebLayer* createLayer();
+  virtual WebKit::WebContentLayer* createContentLayer(
+      WebKit::WebContentLayerClient* client);
+  virtual WebKit::WebExternalTextureLayer* createExternalTextureLayer(
+      WebKit::WebExternalTextureLayerClient* client);
+  virtual WebKit::WebExternalTextureLayer*
+      createExternalTextureLayerForMailbox(
+          WebKit::WebExternalTextureLayerClient* client);
+  virtual WebKit::WebImageLayer* createImageLayer();
+  virtual WebKit::WebSolidColorLayer* createSolidColorLayer();
+  virtual WebKit::WebScrollbarLayer* createScrollbarLayer(
+      WebKit::WebScrollbar* scrollbar,
+      WebKit::WebScrollbarThemePainter painter,
+      WebKit::WebScrollbarThemeGeometry*);
+  virtual WebKit::WebAnimation* createAnimation(
+      const WebKit::WebAnimationCurve& curve,
+      WebKit::WebAnimation::TargetProperty target,
+      int animation_id);
+  virtual WebKit::WebFloatAnimationCurve* createFloatAnimationCurve();
+  virtual WebKit::WebTransformAnimationCurve* createTransformAnimationCurve();
+  virtual WebKit::WebTransformOperations* createTransformOperations();
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(WebCompositorSupportImpl);
+};
+
+}  // namespace webkit
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_COMPOSITOR_SUPPORT_IMPL_H_
diff --git a/webkit/renderer/compositor_bindings/web_content_layer_impl.cc b/webkit/renderer/compositor_bindings/web_content_layer_impl.cc
new file mode 100644
index 0000000..2b2a518
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_content_layer_impl.cc
@@ -0,0 +1,87 @@
+// Copyright 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/compositor_bindings/web_content_layer_impl.h"
+
+#include "base/command_line.h"
+#include "cc/base/switches.h"
+#include "cc/layers/content_layer.h"
+#include "cc/layers/picture_layer.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebContentLayerClient.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebFloatPoint.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebFloatRect.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebRect.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
+#include "third_party/skia/include/utils/SkMatrix44.h"
+
+using cc::ContentLayer;
+using cc::PictureLayer;
+
+namespace webkit {
+
+static bool usingPictureLayer() {
+  return cc::switches::IsImplSidePaintingEnabled();
+}
+
+WebContentLayerImpl::WebContentLayerImpl(WebKit::WebContentLayerClient* client)
+    : client_(client),
+      ignore_lcd_text_change_(false) {
+  if (usingPictureLayer())
+    layer_ = make_scoped_ptr(new WebLayerImpl(PictureLayer::Create(this)));
+  else
+    layer_ = make_scoped_ptr(new WebLayerImpl(ContentLayer::Create(this)));
+  layer_->layer()->SetIsDrawable(true);
+  can_use_lcd_text_ = layer_->layer()->can_use_lcd_text();
+}
+
+WebContentLayerImpl::~WebContentLayerImpl() {
+  if (usingPictureLayer())
+    static_cast<PictureLayer*>(layer_->layer())->ClearClient();
+  else
+    static_cast<ContentLayer*>(layer_->layer())->ClearClient();
+}
+
+WebKit::WebLayer* WebContentLayerImpl::layer() { return layer_.get(); }
+
+void WebContentLayerImpl::setDoubleSided(bool double_sided) {
+  layer_->layer()->SetDoubleSided(double_sided);
+}
+
+// TODO(alokp): Remove this function from WebContentLayer API.
+void WebContentLayerImpl::setUseLCDText(bool enable) {}
+
+void WebContentLayerImpl::setDrawCheckerboardForMissingTiles(bool enable) {
+  layer_->layer()->SetDrawCheckerboardForMissingTiles(enable);
+}
+
+void WebContentLayerImpl::PaintContents(SkCanvas* canvas,
+                                        gfx::Rect clip,
+                                        gfx::RectF* opaque) {
+  if (!client_)
+    return;
+
+  WebKit::WebFloatRect web_opaque;
+  // For picture layers, always record with LCD text.  PictureLayerImpl
+  // will turn this off later during rasterization.
+  bool use_lcd_text = usingPictureLayer() || can_use_lcd_text_;
+  client_->paintContents(canvas, clip, use_lcd_text, web_opaque);
+  *opaque = web_opaque;
+}
+
+void WebContentLayerImpl::DidChangeLayerCanUseLCDText() {
+  // It is important to make this comparison because the LCD text status
+  // here can get out of sync with that in the layer.
+  if (can_use_lcd_text_ == layer_->layer()->can_use_lcd_text())
+    return;
+
+  // LCD text cannot be enabled once disabled.
+  if (layer_->layer()->can_use_lcd_text() && ignore_lcd_text_change_)
+    return;
+
+  can_use_lcd_text_ = layer_->layer()->can_use_lcd_text();
+  ignore_lcd_text_change_ = true;
+  layer_->invalidate();
+}
+
+}  // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/web_content_layer_impl.h b/webkit/renderer/compositor_bindings/web_content_layer_impl.h
new file mode 100644
index 0000000..bee6e8c
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_content_layer_impl.h
@@ -0,0 +1,57 @@
+// Copyright 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_CONTENT_LAYER_IMPL_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_CONTENT_LAYER_IMPL_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "cc/layers/content_layer_client.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebContentLayer.h"
+#include "webkit/renderer/compositor_bindings/web_layer_impl.h"
+#include "webkit/renderer/compositor_bindings/webkit_compositor_bindings_export.h"
+
+namespace cc {
+class IntRect;
+class FloatRect;
+}
+
+namespace WebKit { class WebContentLayerClient; }
+
+namespace webkit {
+
+class WebContentLayerImpl : public WebKit::WebContentLayer,
+                            public cc::ContentLayerClient {
+ public:
+  WEBKIT_COMPOSITOR_BINDINGS_EXPORT explicit WebContentLayerImpl(
+      WebKit::WebContentLayerClient*);
+
+  // WebContentLayer implementation.
+  virtual WebKit::WebLayer* layer();
+  virtual void setDoubleSided(bool double_sided);
+  virtual void setUseLCDText(bool use_lcd_text);
+  virtual void setDrawCheckerboardForMissingTiles(bool checkerboard);
+
+ protected:
+  virtual ~WebContentLayerImpl();
+
+  // ContentLayerClient implementation.
+  virtual void PaintContents(SkCanvas* canvas,
+                             gfx::Rect clip,
+                             gfx::RectF* opaque) OVERRIDE;
+  virtual void DidChangeLayerCanUseLCDText() OVERRIDE;
+
+  scoped_ptr<WebLayerImpl> layer_;
+  WebKit::WebContentLayerClient* client_;
+  bool draws_content_;
+
+ private:
+  bool can_use_lcd_text_;
+  bool ignore_lcd_text_change_;
+
+  DISALLOW_COPY_AND_ASSIGN(WebContentLayerImpl);
+};
+
+}  // namespace webkit
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_CONTENT_LAYER_IMPL_H_
diff --git a/webkit/renderer/compositor_bindings/web_external_texture_layer_impl.cc b/webkit/renderer/compositor_bindings/web_external_texture_layer_impl.cc
new file mode 100644
index 0000000..8e01f29
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_external_texture_layer_impl.cc
@@ -0,0 +1,139 @@
+// Copyright 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/compositor_bindings/web_external_texture_layer_impl.h"
+
+#include "cc/layers/texture_layer.h"
+#include "cc/resources/resource_update_queue.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebExternalTextureLayerClient.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebExternalTextureMailbox.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebFloatRect.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
+#include "webkit/renderer/compositor_bindings/web_layer_impl.h"
+
+using cc::TextureLayer;
+using cc::ResourceUpdateQueue;
+
+namespace webkit {
+
+WebExternalTextureLayerImpl::WebExternalTextureLayerImpl(
+    WebKit::WebExternalTextureLayerClient* client,
+    bool mailbox)
+    : client_(client),
+      uses_mailbox_(mailbox) {
+  scoped_refptr<TextureLayer> layer;
+  cc::TextureLayerClient* cc_client = client_ ? this : NULL;
+  if (mailbox)
+    layer = TextureLayer::CreateForMailbox(cc_client);
+  else
+    layer = TextureLayer::Create(cc_client);
+  layer->SetIsDrawable(true);
+  layer_.reset(new WebLayerImpl(layer));
+}
+
+WebExternalTextureLayerImpl::~WebExternalTextureLayerImpl() {
+  static_cast<TextureLayer*>(layer_->layer())->ClearClient();
+}
+
+WebKit::WebLayer* WebExternalTextureLayerImpl::layer() { return layer_.get(); }
+
+void WebExternalTextureLayerImpl::clearTexture() {
+  if (uses_mailbox_) {
+    static_cast<TextureLayer*>(layer_->layer())->SetTextureMailbox(
+        cc::TextureMailbox());
+  } else {
+    static_cast<TextureLayer*>(layer_->layer())->SetTextureId(0);
+  }
+}
+
+void WebExternalTextureLayerImpl::setTextureId(unsigned id) {
+  static_cast<TextureLayer*>(layer_->layer())->SetTextureId(id);
+}
+
+void WebExternalTextureLayerImpl::setFlipped(bool flipped) {
+  static_cast<TextureLayer*>(layer_->layer())->SetFlipped(flipped);
+}
+
+void WebExternalTextureLayerImpl::setUVRect(const WebKit::WebFloatRect& rect) {
+  static_cast<TextureLayer*>(layer_->layer())->SetUV(
+      gfx::PointF(rect.x, rect.y),
+      gfx::PointF(rect.x + rect.width, rect.y + rect.height));
+}
+
+void WebExternalTextureLayerImpl::setOpaque(bool opaque) {
+  static_cast<TextureLayer*>(layer_->layer())->SetContentsOpaque(opaque);
+}
+
+void WebExternalTextureLayerImpl::setPremultipliedAlpha(
+    bool premultiplied_alpha) {
+  static_cast<TextureLayer*>(layer_->layer())->SetPremultipliedAlpha(
+      premultiplied_alpha);
+}
+
+void WebExternalTextureLayerImpl::willModifyTexture() {
+  static_cast<TextureLayer*>(layer_->layer())->WillModifyTexture();
+}
+
+void WebExternalTextureLayerImpl::setRateLimitContext(bool rate_limit) {
+  static_cast<TextureLayer*>(layer_->layer())->SetRateLimitContext(rate_limit);
+}
+
+class WebTextureUpdaterImpl : public WebKit::WebTextureUpdater {
+ public:
+  explicit WebTextureUpdaterImpl(ResourceUpdateQueue* queue) : queue_(queue) {}
+
+  virtual void appendCopy(unsigned source_texture,
+                          unsigned destination_texture,
+                          WebKit::WebSize size) OVERRIDE {
+    cc::TextureCopier::Parameters copy = { source_texture, destination_texture,
+                                           size };
+    queue_->AppendCopy(copy);
+  }
+
+ private:
+  ResourceUpdateQueue* queue_;
+};
+
+unsigned WebExternalTextureLayerImpl::PrepareTexture(
+    ResourceUpdateQueue* queue) {
+  DCHECK(client_);
+  WebTextureUpdaterImpl updater_impl(queue);
+  return client_->prepareTexture(updater_impl);
+}
+
+WebKit::WebGraphicsContext3D* WebExternalTextureLayerImpl::Context3d() {
+  DCHECK(client_);
+  return client_->context();
+}
+
+bool WebExternalTextureLayerImpl::PrepareTextureMailbox(
+    cc::TextureMailbox* mailbox) {
+  WebKit::WebExternalTextureMailbox client_mailbox;
+  if (!client_->prepareMailbox(&client_mailbox)) {
+    return false;
+  }
+  gpu::Mailbox name;
+  name.SetName(client_mailbox.name);
+  cc::TextureMailbox::ReleaseCallback callback =
+      base::Bind(&WebExternalTextureLayerImpl::DidReleaseMailbox,
+                 this->AsWeakPtr(),
+                 client_mailbox);
+  *mailbox = cc::TextureMailbox(name, callback, client_mailbox.syncPoint);
+  return true;
+}
+
+void WebExternalTextureLayerImpl::DidReleaseMailbox(
+    const WebKit::WebExternalTextureMailbox& mailbox,
+    unsigned sync_point,
+    bool lost_resource) {
+  if (lost_resource)
+    return;
+
+  WebKit::WebExternalTextureMailbox available_mailbox;
+  memcpy(available_mailbox.name, mailbox.name, sizeof(available_mailbox.name));
+  available_mailbox.syncPoint = sync_point;
+  client_->mailboxReleased(available_mailbox);
+}
+
+}  // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/web_external_texture_layer_impl.h b/webkit/renderer/compositor_bindings/web_external_texture_layer_impl.h
new file mode 100644
index 0000000..b4bc02a
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_external_texture_layer_impl.h
@@ -0,0 +1,65 @@
+// Copyright 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_EXTERNAL_TEXTURE_LAYER_IMPL_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_EXTERNAL_TEXTURE_LAYER_IMPL_H_
+
+#include "base/bind.h"
+#include "base/memory/scoped_ptr.h"
+#include "cc/layers/texture_layer_client.h"
+#include "cc/resources/texture_mailbox.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebExternalTextureLayer.h"
+#include "webkit/renderer/compositor_bindings/webkit_compositor_bindings_export.h"
+
+namespace WebKit {
+struct WebFloatRect;
+struct WebExternalTextureMailbox;
+}
+
+namespace webkit {
+
+class WebLayerImpl;
+
+class WebExternalTextureLayerImpl
+    : public WebKit::WebExternalTextureLayer,
+      public cc::TextureLayerClient,
+      public base::SupportsWeakPtr<WebExternalTextureLayerImpl> {
+ public:
+  WEBKIT_COMPOSITOR_BINDINGS_EXPORT explicit WebExternalTextureLayerImpl(
+      WebKit::WebExternalTextureLayerClient*,
+      bool mailbox);
+  virtual ~WebExternalTextureLayerImpl();
+
+  // WebKit::WebExternalTextureLayer implementation.
+  virtual WebKit::WebLayer* layer();
+  virtual void clearTexture();
+  virtual void setTextureId(unsigned texture_id);
+  virtual void setFlipped(bool flipped);
+  virtual void setUVRect(const WebKit::WebFloatRect& uv_rect);
+  virtual void setOpaque(bool opaque);
+  virtual void setPremultipliedAlpha(bool premultiplied);
+
+  virtual void willModifyTexture();
+  virtual void setRateLimitContext(bool rate_limit);
+
+  // TextureLayerClient implementation.
+  virtual unsigned PrepareTexture(cc::ResourceUpdateQueue*) OVERRIDE;
+  virtual WebKit::WebGraphicsContext3D* Context3d() OVERRIDE;
+  virtual bool PrepareTextureMailbox(cc::TextureMailbox* mailbox) OVERRIDE;
+
+ private:
+  void DidReleaseMailbox(const WebKit::WebExternalTextureMailbox& mailbox,
+                         unsigned sync_point,
+                         bool lost_resource);
+
+  WebKit::WebExternalTextureLayerClient* client_;
+  scoped_ptr<WebLayerImpl> layer_;
+  bool uses_mailbox_;
+
+  DISALLOW_COPY_AND_ASSIGN(WebExternalTextureLayerImpl);
+};
+
+}  // namespace webkit
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_EXTERNAL_TEXTURE_LAYER_IMPL_H_
diff --git a/webkit/renderer/compositor_bindings/web_float_animation_curve_impl.cc b/webkit/renderer/compositor_bindings/web_float_animation_curve_impl.cc
new file mode 100644
index 0000000..fdbdba7
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_float_animation_curve_impl.cc
@@ -0,0 +1,57 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/compositor_bindings/web_float_animation_curve_impl.h"
+
+#include "cc/animation/animation_curve.h"
+#include "cc/animation/keyframed_animation_curve.h"
+#include "cc/animation/timing_function.h"
+#include "webkit/renderer/compositor_bindings/web_animation_curve_common.h"
+
+using WebKit::WebFloatKeyframe;
+
+namespace webkit {
+
+WebFloatAnimationCurveImpl::WebFloatAnimationCurveImpl()
+    : curve_(cc::KeyframedFloatAnimationCurve::Create()) {}
+
+WebFloatAnimationCurveImpl::~WebFloatAnimationCurveImpl() {}
+
+WebKit::WebAnimationCurve::AnimationCurveType
+WebFloatAnimationCurveImpl::type() const {
+  return WebKit::WebAnimationCurve::AnimationCurveTypeFloat;
+}
+
+void WebFloatAnimationCurveImpl::add(const WebFloatKeyframe& keyframe) {
+  add(keyframe, TimingFunctionTypeEase);
+}
+
+void WebFloatAnimationCurveImpl::add(const WebFloatKeyframe& keyframe,
+                                     TimingFunctionType type) {
+  curve_->AddKeyframe(cc::FloatKeyframe::Create(
+      keyframe.time, keyframe.value, CreateTimingFunction(type)));
+}
+
+void WebFloatAnimationCurveImpl::add(const WebFloatKeyframe& keyframe,
+                                     double x1,
+                                     double y1,
+                                     double x2,
+                                     double y2) {
+  curve_->AddKeyframe(cc::FloatKeyframe::Create(
+      keyframe.time,
+      keyframe.value,
+      cc::CubicBezierTimingFunction::Create(x1, y1, x2, y2)
+          .PassAs<cc::TimingFunction>()));
+}
+
+float WebFloatAnimationCurveImpl::getValue(double time) const {
+  return curve_->GetValue(time);
+}
+
+scoped_ptr<cc::AnimationCurve>
+WebFloatAnimationCurveImpl::CloneToAnimationCurve() const {
+  return curve_->Clone();
+}
+
+}  // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/web_float_animation_curve_impl.h b/webkit/renderer/compositor_bindings/web_float_animation_curve_impl.h
new file mode 100644
index 0000000..2f4d656
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_float_animation_curve_impl.h
@@ -0,0 +1,51 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_FLOAT_ANIMATION_CURVE_IMPL_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_FLOAT_ANIMATION_CURVE_IMPL_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebFloatAnimationCurve.h"
+#include "webkit/renderer/compositor_bindings/webkit_compositor_bindings_export.h"
+
+namespace cc {
+class AnimationCurve;
+class KeyframedFloatAnimationCurve;
+}
+
+namespace WebKit { struct WebFloatKeyframe; }
+
+namespace webkit {
+
+class WebFloatAnimationCurveImpl : public WebKit::WebFloatAnimationCurve {
+ public:
+  WEBKIT_COMPOSITOR_BINDINGS_EXPORT WebFloatAnimationCurveImpl();
+  virtual ~WebFloatAnimationCurveImpl();
+
+  // WebAnimationCurve implementation.
+  virtual AnimationCurveType type() const;
+
+  // WebFloatAnimationCurve implementation.
+  virtual void add(const WebKit::WebFloatKeyframe& keyframe);
+  virtual void add(const WebKit::WebFloatKeyframe& keyframe,
+                   TimingFunctionType type);
+  virtual void add(const WebKit::WebFloatKeyframe& keyframe,
+                   double x1,
+                   double y1,
+                   double x2,
+                   double y2);
+
+  virtual float getValue(double time) const;
+
+  scoped_ptr<cc::AnimationCurve> CloneToAnimationCurve() const;
+
+ private:
+  scoped_ptr<cc::KeyframedFloatAnimationCurve> curve_;
+
+  DISALLOW_COPY_AND_ASSIGN(WebFloatAnimationCurveImpl);
+};
+
+}  // namespace webkit
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_FLOAT_ANIMATION_CURVE_IMPL_H_
diff --git a/webkit/renderer/compositor_bindings/web_float_animation_curve_unittest.cc b/webkit/renderer/compositor_bindings/web_float_animation_curve_unittest.cc
new file mode 100644
index 0000000..29e5626
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_float_animation_curve_unittest.cc
@@ -0,0 +1,233 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/memory/scoped_ptr.h"
+#include "cc/animation/timing_function.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "webkit/renderer/compositor_bindings/web_float_animation_curve_impl.h"
+
+using WebKit::WebAnimationCurve;
+using WebKit::WebFloatAnimationCurve;
+using WebKit::WebFloatKeyframe;
+
+namespace webkit {
+namespace {
+
+// Tests that a float animation with one keyframe works as expected.
+TEST(WebFloatAnimationCurveTest, OneFloatKeyframe) {
+  scoped_ptr<WebFloatAnimationCurve> curve(new WebFloatAnimationCurveImpl);
+  curve->add(WebFloatKeyframe(0, 2),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+  EXPECT_FLOAT_EQ(2, curve->getValue(-1));
+  EXPECT_FLOAT_EQ(2, curve->getValue(0));
+  EXPECT_FLOAT_EQ(2, curve->getValue(0.5));
+  EXPECT_FLOAT_EQ(2, curve->getValue(1));
+  EXPECT_FLOAT_EQ(2, curve->getValue(2));
+}
+
+// Tests that a float animation with two keyframes works as expected.
+TEST(WebFloatAnimationCurveTest, TwoFloatKeyframe) {
+  scoped_ptr<WebFloatAnimationCurve> curve(new WebFloatAnimationCurveImpl);
+  curve->add(WebFloatKeyframe(0, 2),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+  curve->add(WebFloatKeyframe(1, 4),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+  EXPECT_FLOAT_EQ(2, curve->getValue(-1));
+  EXPECT_FLOAT_EQ(2, curve->getValue(0));
+  EXPECT_FLOAT_EQ(3, curve->getValue(0.5));
+  EXPECT_FLOAT_EQ(4, curve->getValue(1));
+  EXPECT_FLOAT_EQ(4, curve->getValue(2));
+}
+
+// Tests that a float animation with three keyframes works as expected.
+TEST(WebFloatAnimationCurveTest, ThreeFloatKeyframe) {
+  scoped_ptr<WebFloatAnimationCurve> curve(new WebFloatAnimationCurveImpl);
+  curve->add(WebFloatKeyframe(0, 2),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+  curve->add(WebFloatKeyframe(1, 4),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+  curve->add(WebFloatKeyframe(2, 8),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+  EXPECT_FLOAT_EQ(2, curve->getValue(-1));
+  EXPECT_FLOAT_EQ(2, curve->getValue(0));
+  EXPECT_FLOAT_EQ(3, curve->getValue(0.5));
+  EXPECT_FLOAT_EQ(4, curve->getValue(1));
+  EXPECT_FLOAT_EQ(6, curve->getValue(1.5));
+  EXPECT_FLOAT_EQ(8, curve->getValue(2));
+  EXPECT_FLOAT_EQ(8, curve->getValue(3));
+}
+
+// Tests that a float animation with multiple keys at a given time works sanely.
+TEST(WebFloatAnimationCurveTest, RepeatedFloatKeyTimes) {
+  scoped_ptr<WebFloatAnimationCurve> curve(new WebFloatAnimationCurveImpl);
+  curve->add(WebFloatKeyframe(0, 4),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+  curve->add(WebFloatKeyframe(1, 4),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+  curve->add(WebFloatKeyframe(1, 6),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+  curve->add(WebFloatKeyframe(2, 6),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+
+  EXPECT_FLOAT_EQ(4, curve->getValue(-1));
+  EXPECT_FLOAT_EQ(4, curve->getValue(0));
+  EXPECT_FLOAT_EQ(4, curve->getValue(0.5));
+
+  // There is a discontinuity at 1. Any value between 4 and 6 is valid.
+  float value = curve->getValue(1);
+  EXPECT_TRUE(value >= 4 && value <= 6);
+
+  EXPECT_FLOAT_EQ(6, curve->getValue(1.5));
+  EXPECT_FLOAT_EQ(6, curve->getValue(2));
+  EXPECT_FLOAT_EQ(6, curve->getValue(3));
+}
+
+// Tests that the keyframes may be added out of order.
+TEST(WebFloatAnimationCurveTest, UnsortedKeyframes) {
+  scoped_ptr<WebFloatAnimationCurve> curve(new WebFloatAnimationCurveImpl);
+  curve->add(WebFloatKeyframe(2, 8),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+  curve->add(WebFloatKeyframe(0, 2),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+  curve->add(WebFloatKeyframe(1, 4),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+
+  EXPECT_FLOAT_EQ(2, curve->getValue(-1));
+  EXPECT_FLOAT_EQ(2, curve->getValue(0));
+  EXPECT_FLOAT_EQ(3, curve->getValue(0.5));
+  EXPECT_FLOAT_EQ(4, curve->getValue(1));
+  EXPECT_FLOAT_EQ(6, curve->getValue(1.5));
+  EXPECT_FLOAT_EQ(8, curve->getValue(2));
+  EXPECT_FLOAT_EQ(8, curve->getValue(3));
+}
+
+// Tests that a cubic bezier timing function works as expected.
+TEST(WebFloatAnimationCurveTest, CubicBezierTimingFunction) {
+  scoped_ptr<WebFloatAnimationCurve> curve(new WebFloatAnimationCurveImpl);
+  curve->add(WebFloatKeyframe(0, 0), 0.25, 0, 0.75, 1);
+  curve->add(WebFloatKeyframe(1, 1),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+
+  EXPECT_FLOAT_EQ(0, curve->getValue(0));
+  EXPECT_LT(0, curve->getValue(0.25));
+  EXPECT_GT(0.25, curve->getValue(0.25));
+  EXPECT_NEAR(curve->getValue(0.5), 0.5, 0.00015);
+  EXPECT_LT(0.75, curve->getValue(0.75));
+  EXPECT_GT(1, curve->getValue(0.75));
+  EXPECT_FLOAT_EQ(1, curve->getValue(1));
+}
+
+// Tests that an ease timing function works as expected.
+TEST(WebFloatAnimationCurveTest, EaseTimingFunction) {
+  scoped_ptr<WebFloatAnimationCurve> curve(new WebFloatAnimationCurveImpl);
+  curve->add(WebFloatKeyframe(0, 0), WebAnimationCurve::TimingFunctionTypeEase);
+  curve->add(WebFloatKeyframe(1, 1),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+
+  scoped_ptr<cc::TimingFunction> timing_function(
+      cc::EaseTimingFunction::Create());
+  for (int i = 0; i <= 4; ++i) {
+    const double time = i * 0.25;
+    EXPECT_FLOAT_EQ(timing_function->GetValue(time), curve->getValue(time));
+  }
+}
+
+// Tests using a linear timing function.
+TEST(WebFloatAnimationCurveTest, LinearTimingFunction) {
+  scoped_ptr<WebFloatAnimationCurve> curve(new WebFloatAnimationCurveImpl);
+  curve->add(WebFloatKeyframe(0, 0),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+  curve->add(WebFloatKeyframe(1, 1),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+
+  for (int i = 0; i <= 4; ++i) {
+    const double time = i * 0.25;
+    EXPECT_FLOAT_EQ(time, curve->getValue(time));
+  }
+}
+
+// Tests that an ease in timing function works as expected.
+TEST(WebFloatAnimationCurveTest, EaseInTimingFunction) {
+  scoped_ptr<WebFloatAnimationCurve> curve(new WebFloatAnimationCurveImpl);
+  curve->add(WebFloatKeyframe(0, 0),
+             WebAnimationCurve::TimingFunctionTypeEaseIn);
+  curve->add(WebFloatKeyframe(1, 1),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+
+  scoped_ptr<cc::TimingFunction> timing_function(
+      cc::EaseInTimingFunction::Create());
+  for (int i = 0; i <= 4; ++i) {
+    const double time = i * 0.25;
+    EXPECT_FLOAT_EQ(timing_function->GetValue(time), curve->getValue(time));
+  }
+}
+
+// Tests that an ease in timing function works as expected.
+TEST(WebFloatAnimationCurveTest, EaseOutTimingFunction) {
+  scoped_ptr<WebFloatAnimationCurve> curve(new WebFloatAnimationCurveImpl);
+  curve->add(WebFloatKeyframe(0, 0),
+             WebAnimationCurve::TimingFunctionTypeEaseOut);
+  curve->add(WebFloatKeyframe(1, 1),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+
+  scoped_ptr<cc::TimingFunction> timing_function(
+      cc::EaseOutTimingFunction::Create());
+  for (int i = 0; i <= 4; ++i) {
+    const double time = i * 0.25;
+    EXPECT_FLOAT_EQ(timing_function->GetValue(time), curve->getValue(time));
+  }
+}
+
+// Tests that an ease in timing function works as expected.
+TEST(WebFloatAnimationCurveTest, EaseInOutTimingFunction) {
+  scoped_ptr<WebFloatAnimationCurve> curve(new WebFloatAnimationCurveImpl);
+  curve->add(WebFloatKeyframe(0, 0),
+             WebAnimationCurve::TimingFunctionTypeEaseInOut);
+  curve->add(WebFloatKeyframe(1, 1),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+
+  scoped_ptr<cc::TimingFunction> timing_function(
+      cc::EaseInOutTimingFunction::Create());
+  for (int i = 0; i <= 4; ++i) {
+    const double time = i * 0.25;
+    EXPECT_FLOAT_EQ(timing_function->GetValue(time), curve->getValue(time));
+  }
+}
+
+// Tests that an ease in timing function works as expected.
+TEST(WebFloatAnimationCurveTest, CustomBezierTimingFunction) {
+  scoped_ptr<WebFloatAnimationCurve> curve(new WebFloatAnimationCurveImpl);
+  double x1 = 0.3;
+  double y1 = 0.2;
+  double x2 = 0.8;
+  double y2 = 0.7;
+  curve->add(WebFloatKeyframe(0, 0), x1, y1, x2, y2);
+  curve->add(WebFloatKeyframe(1, 1),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+
+  scoped_ptr<cc::TimingFunction> timing_function(
+      cc::CubicBezierTimingFunction::Create(x1, y1, x2, y2));
+  for (int i = 0; i <= 4; ++i) {
+    const double time = i * 0.25;
+    EXPECT_FLOAT_EQ(timing_function->GetValue(time), curve->getValue(time));
+  }
+}
+
+// Tests that the default timing function is indeed ease.
+TEST(WebFloatAnimationCurveTest, DefaultTimingFunction) {
+  scoped_ptr<WebFloatAnimationCurve> curve(new WebFloatAnimationCurveImpl);
+  curve->add(WebFloatKeyframe(0, 0));
+  curve->add(WebFloatKeyframe(1, 1),
+             WebAnimationCurve::TimingFunctionTypeLinear);
+
+  scoped_ptr<cc::TimingFunction> timing_function(
+      cc::EaseTimingFunction::Create());
+  for (int i = 0; i <= 4; ++i) {
+    const double time = i * 0.25;
+    EXPECT_FLOAT_EQ(timing_function->GetValue(time), curve->getValue(time));
+  }
+}
+
+}  // namespace
+}  // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/web_image_layer_impl.cc b/webkit/renderer/compositor_bindings/web_image_layer_impl.cc
new file mode 100644
index 0000000..3a432b8
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_image_layer_impl.cc
@@ -0,0 +1,41 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/compositor_bindings/web_image_layer_impl.h"
+
+#include "base/command_line.h"
+#include "cc/base/switches.h"
+#include "cc/layers/image_layer.h"
+#include "cc/layers/picture_image_layer.h"
+#include "webkit/renderer/compositor_bindings/web_layer_impl.h"
+#include "webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds.h"
+
+static bool usingPictureLayer() {
+  return cc::switches::IsImplSidePaintingEnabled();
+}
+
+namespace webkit {
+
+WebImageLayerImpl::WebImageLayerImpl() {
+  if (usingPictureLayer())
+    layer_.reset(new WebLayerImplFixedBounds(cc::PictureImageLayer::Create()));
+  else
+    layer_.reset(new WebLayerImpl(cc::ImageLayer::Create()));
+}
+
+WebImageLayerImpl::~WebImageLayerImpl() {}
+
+WebKit::WebLayer* WebImageLayerImpl::layer() { return layer_.get(); }
+
+void WebImageLayerImpl::setBitmap(SkBitmap bitmap) {
+  if (usingPictureLayer()) {
+    static_cast<cc::PictureImageLayer*>(layer_->layer())->SetBitmap(bitmap);
+    static_cast<WebLayerImplFixedBounds*>(layer_.get())->SetFixedBounds(
+        gfx::Size(bitmap.width(), bitmap.height()));
+  } else {
+    static_cast<cc::ImageLayer*>(layer_->layer())->SetBitmap(bitmap);
+  }
+}
+
+}  // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/web_image_layer_impl.h b/webkit/renderer/compositor_bindings/web_image_layer_impl.h
new file mode 100644
index 0000000..c74d45f
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_image_layer_impl.h
@@ -0,0 +1,34 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_IMAGE_LAYER_IMPL_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_IMAGE_LAYER_IMPL_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebImageLayer.h"
+#include "third_party/skia/include/core/SkBitmap.h"
+#include "webkit/renderer/compositor_bindings/webkit_compositor_bindings_export.h"
+
+namespace webkit {
+
+class WebLayerImpl;
+
+class WebImageLayerImpl : public WebKit::WebImageLayer {
+ public:
+  WEBKIT_COMPOSITOR_BINDINGS_EXPORT WebImageLayerImpl();
+  virtual ~WebImageLayerImpl();
+
+  // WebKit::WebImageLayer implementation.
+  virtual WebKit::WebLayer* layer();
+  virtual void setBitmap(SkBitmap);
+
+ private:
+  scoped_ptr<WebLayerImpl> layer_;
+
+  DISALLOW_COPY_AND_ASSIGN(WebImageLayerImpl);
+};
+
+}  // namespace webkit
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_IMAGE_LAYER_IMPL_H_
diff --git a/webkit/renderer/compositor_bindings/web_layer_impl.cc b/webkit/renderer/compositor_bindings/web_layer_impl.cc
new file mode 100644
index 0000000..6645538
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_layer_impl.cc
@@ -0,0 +1,356 @@
+// Copyright 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/compositor_bindings/web_layer_impl.h"
+
+#include "base/string_util.h"
+#include "cc/animation/animation.h"
+#include "cc/base/region.h"
+#include "cc/layers/layer.h"
+#include "cc/layers/layer_position_constraint.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebCompositingReasons.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebFloatPoint.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebFloatRect.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebLayerPositionConstraint.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
+#include "third_party/skia/include/utils/SkMatrix44.h"
+#include "webkit/renderer/compositor_bindings/web_animation_impl.h"
+
+using cc::Animation;
+using cc::Layer;
+using WebKit::WebLayer;
+using WebKit::WebFloatPoint;
+using WebKit::WebVector;
+using WebKit::WebRect;
+using WebKit::WebSize;
+using WebKit::WebColor;
+using WebKit::WebFilterOperations;
+
+namespace webkit {
+
+WebLayerImpl::WebLayerImpl() : layer_(Layer::Create()) {}
+
+WebLayerImpl::WebLayerImpl(scoped_refptr<Layer> layer) : layer_(layer) {}
+
+WebLayerImpl::~WebLayerImpl() {
+  layer_->ClearRenderSurface();
+  layer_->set_layer_animation_delegate(NULL);
+}
+
+int WebLayerImpl::id() const { return layer_->id(); }
+
+void WebLayerImpl::invalidateRect(const WebKit::WebFloatRect& rect) {
+  layer_->SetNeedsDisplayRect(rect);
+}
+
+void WebLayerImpl::invalidate() { layer_->SetNeedsDisplay(); }
+
+void WebLayerImpl::addChild(WebLayer* child) {
+  layer_->AddChild(static_cast<WebLayerImpl*>(child)->layer());
+}
+
+void WebLayerImpl::insertChild(WebLayer* child, size_t index) {
+  layer_->InsertChild(static_cast<WebLayerImpl*>(child)->layer(), index);
+}
+
+void WebLayerImpl::replaceChild(WebLayer* reference, WebLayer* new_layer) {
+  layer_->ReplaceChild(static_cast<WebLayerImpl*>(reference)->layer(),
+                       static_cast<WebLayerImpl*>(new_layer)->layer());
+}
+
+void WebLayerImpl::removeFromParent() { layer_->RemoveFromParent(); }
+
+void WebLayerImpl::removeAllChildren() { layer_->RemoveAllChildren(); }
+
+void WebLayerImpl::setAnchorPoint(const WebFloatPoint& anchor_point) {
+  layer_->SetAnchorPoint(anchor_point);
+}
+
+WebFloatPoint WebLayerImpl::anchorPoint() const {
+  return layer_->anchor_point();
+}
+
+void WebLayerImpl::setAnchorPointZ(float anchor_point_z) {
+  layer_->SetAnchorPointZ(anchor_point_z);
+}
+
+float WebLayerImpl::anchorPointZ() const { return layer_->anchor_point_z(); }
+
+void WebLayerImpl::setBounds(const WebSize& size) { layer_->SetBounds(size); }
+
+WebSize WebLayerImpl::bounds() const { return layer_->bounds(); }
+
+void WebLayerImpl::setMasksToBounds(bool masks_to_bounds) {
+  layer_->SetMasksToBounds(masks_to_bounds);
+}
+
+bool WebLayerImpl::masksToBounds() const { return layer_->masks_to_bounds(); }
+
+void WebLayerImpl::setMaskLayer(WebLayer* maskLayer) {
+  layer_->SetMaskLayer(
+      maskLayer ? static_cast<WebLayerImpl*>(maskLayer)->layer() : 0);
+}
+
+void WebLayerImpl::setReplicaLayer(WebLayer* replica_layer) {
+  layer_->SetReplicaLayer(
+      replica_layer ? static_cast<WebLayerImpl*>(replica_layer)->layer() : 0);
+}
+
+void WebLayerImpl::setOpacity(float opacity) { layer_->SetOpacity(opacity); }
+
+float WebLayerImpl::opacity() const { return layer_->opacity(); }
+
+void WebLayerImpl::setOpaque(bool opaque) { layer_->SetContentsOpaque(opaque); }
+
+bool WebLayerImpl::opaque() const { return layer_->contents_opaque(); }
+
+void WebLayerImpl::setPosition(const WebFloatPoint& position) {
+  layer_->SetPosition(position);
+}
+
+WebFloatPoint WebLayerImpl::position() const { return layer_->position(); }
+
+void WebLayerImpl::setSublayerTransform(const SkMatrix44& matrix) {
+  gfx::Transform sub_layer_transform;
+  sub_layer_transform.matrix() = matrix;
+  layer_->SetSublayerTransform(sub_layer_transform);
+}
+
+SkMatrix44 WebLayerImpl::sublayerTransform() const {
+  return layer_->sublayer_transform().matrix();
+}
+
+void WebLayerImpl::setTransform(const SkMatrix44& matrix) {
+  gfx::Transform transform;
+  transform.matrix() = matrix;
+  layer_->SetTransform(transform);
+}
+
+SkMatrix44 WebLayerImpl::transform() const {
+  return layer_->transform().matrix();
+}
+
+void WebLayerImpl::setDrawsContent(bool draws_content) {
+  layer_->SetIsDrawable(draws_content);
+}
+
+bool WebLayerImpl::drawsContent() const { return layer_->DrawsContent(); }
+
+void WebLayerImpl::setPreserves3D(bool preserve3D) {
+  layer_->SetPreserves3d(preserve3D);
+}
+
+void WebLayerImpl::setUseParentBackfaceVisibility(
+    bool use_parent_backface_visibility) {
+  layer_->set_use_parent_backface_visibility(use_parent_backface_visibility);
+}
+
+void WebLayerImpl::setBackgroundColor(WebColor color) {
+  layer_->SetBackgroundColor(color);
+}
+
+WebColor WebLayerImpl::backgroundColor() const {
+  return layer_->background_color();
+}
+
+void WebLayerImpl::setFilters(const WebFilterOperations& filters) {
+  layer_->SetFilters(filters);
+}
+
+void WebLayerImpl::setBackgroundFilters(const WebFilterOperations& filters) {
+  layer_->SetBackgroundFilters(filters);
+}
+
+void WebLayerImpl::setFilter(SkImageFilter* filter) {
+  layer_->SetFilter(skia::SharePtr(filter));
+}
+
+void WebLayerImpl::setDebugName(WebKit::WebString name) {
+  layer_->SetDebugName(UTF16ToASCII(name));
+}
+
+void WebLayerImpl::setCompositingReasons(
+    WebKit::WebCompositingReasons reasons) {
+  layer_->SetCompositingReasons(reasons);
+}
+
+void WebLayerImpl::setAnimationDelegate(
+      WebKit::WebAnimationDelegate* delegate) {
+  layer_->set_layer_animation_delegate(delegate);
+}
+
+bool WebLayerImpl::addAnimation(WebKit::WebAnimation* animation) {
+  return layer_->AddAnimation(
+      static_cast<WebAnimationImpl*>(animation)->CloneToAnimation());
+}
+
+void WebLayerImpl::removeAnimation(int animation_id) {
+  layer_->RemoveAnimation(animation_id);
+}
+
+void WebLayerImpl::removeAnimation(
+    int animation_id,
+    WebKit::WebAnimation::TargetProperty target_property) {
+  layer_->layer_animation_controller()->RemoveAnimation(
+      animation_id,
+      static_cast<Animation::TargetProperty>(target_property));
+}
+
+void WebLayerImpl::pauseAnimation(int animation_id, double time_offset) {
+  layer_->PauseAnimation(animation_id, time_offset);
+}
+
+void WebLayerImpl::suspendAnimations(double monotonic_time) {
+  layer_->SuspendAnimations(monotonic_time);
+}
+
+void WebLayerImpl::resumeAnimations(double monotonic_time) {
+  layer_->ResumeAnimations(monotonic_time);
+}
+
+bool WebLayerImpl::hasActiveAnimation() { return layer_->HasActiveAnimation(); }
+
+void WebLayerImpl::transferAnimationsTo(WebLayer* other) {
+  DCHECK(other);
+  layer_->TransferAnimationsTo(static_cast<WebLayerImpl*>(other)->layer_);
+}
+
+void WebLayerImpl::setForceRenderSurface(bool force_render_surface) {
+  layer_->SetForceRenderSurface(force_render_surface);
+}
+
+void WebLayerImpl::setScrollPosition(WebKit::WebPoint position) {
+  layer_->SetScrollOffset(gfx::Point(position).OffsetFromOrigin());
+}
+
+WebKit::WebPoint WebLayerImpl::scrollPosition() const {
+  return gfx::PointAtOffsetFromOrigin(layer_->scroll_offset());
+}
+
+void WebLayerImpl::setMaxScrollPosition(WebSize max_scroll_position) {
+  layer_->SetMaxScrollOffset(max_scroll_position);
+}
+
+WebSize WebLayerImpl::maxScrollPosition() const {
+  return layer_->max_scroll_offset();
+}
+
+void WebLayerImpl::setScrollable(bool scrollable) {
+  layer_->SetScrollable(scrollable);
+}
+
+bool WebLayerImpl::scrollable() const { return layer_->scrollable(); }
+
+void WebLayerImpl::setHaveWheelEventHandlers(bool have_wheel_event_handlers) {
+  layer_->SetHaveWheelEventHandlers(have_wheel_event_handlers);
+}
+
+bool WebLayerImpl::haveWheelEventHandlers() const {
+  return layer_->have_wheel_event_handlers();
+}
+
+void WebLayerImpl::setShouldScrollOnMainThread(
+    bool should_scroll_on_main_thread) {
+  layer_->SetShouldScrollOnMainThread(should_scroll_on_main_thread);
+}
+
+bool WebLayerImpl::shouldScrollOnMainThread() const {
+  return layer_->should_scroll_on_main_thread();
+}
+
+void WebLayerImpl::setNonFastScrollableRegion(const WebVector<WebRect>& rects) {
+  cc::Region region;
+  for (size_t i = 0; i < rects.size(); ++i)
+    region.Union(rects[i]);
+  layer_->SetNonFastScrollableRegion(region);
+}
+
+WebVector<WebRect> WebLayerImpl::nonFastScrollableRegion() const {
+  size_t num_rects = 0;
+  for (cc::Region::Iterator region_rects(layer_->non_fast_scrollable_region());
+       region_rects.has_rect();
+       region_rects.next())
+    ++num_rects;
+
+  WebVector<WebRect> result(num_rects);
+  size_t i = 0;
+  for (cc::Region::Iterator region_rects(layer_->non_fast_scrollable_region());
+       region_rects.has_rect();
+       region_rects.next()) {
+    result[i] = region_rects.rect();
+    ++i;
+  }
+  return result;
+}
+
+void WebLayerImpl::setTouchEventHandlerRegion(const WebVector<WebRect>& rects) {
+  cc::Region region;
+  for (size_t i = 0; i < rects.size(); ++i)
+    region.Union(rects[i]);
+  layer_->SetTouchEventHandlerRegion(region);
+}
+
+WebVector<WebRect> WebLayerImpl::touchEventHandlerRegion() const {
+  size_t num_rects = 0;
+  for (cc::Region::Iterator region_rects(layer_->touch_event_handler_region());
+       region_rects.has_rect();
+       region_rects.next())
+    ++num_rects;
+
+  WebVector<WebRect> result(num_rects);
+  size_t i = 0;
+  for (cc::Region::Iterator region_rects(layer_->touch_event_handler_region());
+       region_rects.has_rect();
+       region_rects.next()) {
+    result[i] = region_rects.rect();
+    ++i;
+  }
+  return result;
+}
+
+void WebLayerImpl::setIsContainerForFixedPositionLayers(bool enable) {
+  layer_->SetIsContainerForFixedPositionLayers(enable);
+}
+
+bool WebLayerImpl::isContainerForFixedPositionLayers() const {
+  return layer_->IsContainerForFixedPositionLayers();
+}
+
+static WebKit::WebLayerPositionConstraint ToWebLayerPositionConstraint(
+    const cc::LayerPositionConstraint& constraint) {
+  WebKit::WebLayerPositionConstraint web_constraint;
+  web_constraint.isFixedPosition = constraint.is_fixed_position();
+  web_constraint.isFixedToRightEdge = constraint.is_fixed_to_right_edge();
+  web_constraint.isFixedToBottomEdge = constraint.is_fixed_to_bottom_edge();
+  return web_constraint;
+}
+
+static cc::LayerPositionConstraint ToLayerPositionConstraint(
+    const WebKit::WebLayerPositionConstraint& web_constraint) {
+  cc::LayerPositionConstraint constraint;
+  constraint.set_is_fixed_position(web_constraint.isFixedPosition);
+  constraint.set_is_fixed_to_right_edge(web_constraint.isFixedToRightEdge);
+  constraint.set_is_fixed_to_bottom_edge(web_constraint.isFixedToBottomEdge);
+  return constraint;
+}
+
+void WebLayerImpl::setPositionConstraint(
+    const WebKit::WebLayerPositionConstraint& constraint) {
+  layer_->SetPositionConstraint(ToLayerPositionConstraint(constraint));
+}
+
+WebKit::WebLayerPositionConstraint WebLayerImpl::positionConstraint() const {
+  return ToWebLayerPositionConstraint(layer_->position_constraint());
+}
+
+void WebLayerImpl::setScrollClient(
+    WebKit::WebLayerScrollClient* scroll_client) {
+  layer_->set_layer_scroll_client(scroll_client);
+}
+
+bool WebLayerImpl::isOrphan() const { return !layer_->layer_tree_host(); }
+
+Layer* WebLayerImpl::layer() const { return layer_.get(); }
+
+}  // namespace WebKit
diff --git a/webkit/renderer/compositor_bindings/web_layer_impl.h b/webkit/renderer/compositor_bindings/web_layer_impl.h
new file mode 100644
index 0000000..01e7e58
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_layer_impl.h
@@ -0,0 +1,130 @@
+// Copyright 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_LAYER_IMPL_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_LAYER_IMPL_H_
+
+#include "base/memory/ref_counted.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebAnimation.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebColor.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebCompositingReasons.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebFloatPoint.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebLayer.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebPoint.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebRect.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebString.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebVector.h"
+#include "third_party/skia/include/utils/SkMatrix44.h"
+#include "webkit/renderer/compositor_bindings/webkit_compositor_bindings_export.h"
+
+namespace cc { class Layer; }
+
+// TODO(senorblanco):  Remove this once WebKit changes have landed.
+class SkImageFilter;
+
+namespace WebKit {
+class WebAnimationDelegate;
+class WebFilterOperations;
+class WebLayerScrollClient;
+struct WebFloatRect;
+}
+
+namespace webkit {
+
+class WebLayerImpl : public WebKit::WebLayer {
+ public:
+  WEBKIT_COMPOSITOR_BINDINGS_EXPORT WebLayerImpl();
+  WEBKIT_COMPOSITOR_BINDINGS_EXPORT explicit WebLayerImpl(
+      scoped_refptr<cc::Layer>);
+  virtual ~WebLayerImpl();
+
+  WEBKIT_COMPOSITOR_BINDINGS_EXPORT cc::Layer* layer() const;
+
+  // WebLayer implementation.
+  virtual int id() const;
+  virtual void invalidateRect(const WebKit::WebFloatRect&);
+  virtual void invalidate();
+  virtual void addChild(WebKit::WebLayer* child);
+  virtual void insertChild(WebKit::WebLayer* child, size_t index);
+  virtual void replaceChild(WebKit::WebLayer* reference,
+                            WebKit::WebLayer* new_layer);
+  virtual void removeFromParent();
+  virtual void removeAllChildren();
+  virtual void setAnchorPoint(const WebKit::WebFloatPoint&);
+  virtual WebKit::WebFloatPoint anchorPoint() const;
+  virtual void setAnchorPointZ(float anchor_point_z);
+  virtual float anchorPointZ() const;
+  virtual void setBounds(const WebKit::WebSize& bounds);
+  virtual WebKit::WebSize bounds() const;
+  virtual void setMasksToBounds(bool masks_to_bounds);
+  virtual bool masksToBounds() const;
+  virtual void setMaskLayer(WebKit::WebLayer* mask);
+  virtual void setReplicaLayer(WebKit::WebLayer* replica);
+  virtual void setOpacity(float opacity);
+  virtual float opacity() const;
+  virtual void setOpaque(bool opaque);
+  virtual bool opaque() const;
+  virtual void setPosition(const WebKit::WebFloatPoint& position);
+  virtual WebKit::WebFloatPoint position() const;
+  virtual void setSublayerTransform(const SkMatrix44&);
+  virtual SkMatrix44 sublayerTransform() const;
+  virtual void setTransform(const SkMatrix44& transform);
+  virtual SkMatrix44 transform() const;
+  virtual void setDrawsContent(bool draws_content);
+  virtual bool drawsContent() const;
+  virtual void setPreserves3D(bool preserves_3d);
+  virtual void setUseParentBackfaceVisibility(bool visible);
+  virtual void setBackgroundColor(WebKit::WebColor color);
+  virtual WebKit::WebColor backgroundColor() const;
+  virtual void setFilter(SkImageFilter* filter);
+  virtual void setFilters(const WebKit::WebFilterOperations& filters);
+  virtual void setBackgroundFilters(const WebKit::WebFilterOperations& filters);
+  virtual void setDebugName(WebKit::WebString name);
+  virtual void setCompositingReasons(WebKit::WebCompositingReasons);
+  virtual void setAnimationDelegate(WebKit::WebAnimationDelegate* delegate);
+  virtual bool addAnimation(WebKit::WebAnimation* animation);
+  virtual void removeAnimation(int animation_id);
+  virtual void removeAnimation(int animation_id,
+                               WebKit::WebAnimation::TargetProperty);
+  virtual void pauseAnimation(int animation_id, double time_offset);
+  virtual void suspendAnimations(double monotonic_time);
+  virtual void resumeAnimations(double monotonic_time);
+  virtual bool hasActiveAnimation();
+  virtual void transferAnimationsTo(WebKit::WebLayer* layer);
+  virtual void setForceRenderSurface(bool force);
+  virtual void setScrollPosition(WebKit::WebPoint position);
+  virtual WebKit::WebPoint scrollPosition() const;
+  virtual void setMaxScrollPosition(WebKit::WebSize max_position);
+  virtual WebKit::WebSize maxScrollPosition() const;
+  virtual void setScrollable(bool scrollable);
+  virtual bool scrollable() const;
+  virtual void setHaveWheelEventHandlers(bool have_wheel_event_handlers);
+  virtual bool haveWheelEventHandlers() const;
+  virtual void setShouldScrollOnMainThread(bool scroll_on_main);
+  virtual bool shouldScrollOnMainThread() const;
+  virtual void setNonFastScrollableRegion(
+      const WebKit::WebVector<WebKit::WebRect>& region);
+  virtual WebKit::WebVector<WebKit::WebRect> nonFastScrollableRegion() const;
+  virtual void setTouchEventHandlerRegion(
+      const WebKit::WebVector<WebKit::WebRect>& region);
+  virtual WebKit::WebVector<WebKit::WebRect> touchEventHandlerRegion() const;
+  virtual void setIsContainerForFixedPositionLayers(bool is_container);
+  virtual bool isContainerForFixedPositionLayers() const;
+  virtual void setPositionConstraint(
+      const WebKit::WebLayerPositionConstraint& constraint);
+  virtual WebKit::WebLayerPositionConstraint positionConstraint() const;
+  virtual void setScrollClient(WebKit::WebLayerScrollClient* client);
+  virtual bool isOrphan() const;
+
+ protected:
+  scoped_refptr<cc::Layer> layer_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(WebLayerImpl);
+};
+
+}  // namespace WebKit
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_LAYER_IMPL_H_
diff --git a/webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds.cc b/webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds.cc
new file mode 100644
index 0000000..6eecd58
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds.cc
@@ -0,0 +1,128 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds.h"
+
+#include "cc/layers/layer.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebFloatPoint.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
+#include "third_party/skia/include/utils/SkMatrix44.h"
+
+using cc::Layer;
+
+namespace webkit {
+
+WebLayerImplFixedBounds::WebLayerImplFixedBounds() {
+}
+
+WebLayerImplFixedBounds::WebLayerImplFixedBounds(scoped_refptr<Layer> layer)
+    : WebLayerImpl(layer) {
+}
+
+
+WebLayerImplFixedBounds::~WebLayerImplFixedBounds() {
+}
+
+void WebLayerImplFixedBounds::invalidateRect(const WebKit::WebFloatRect& rect) {
+  // Partial invalidations seldom occur for such layers.
+  // Simply invalidate the whole layer to avoid transformation of coordinates.
+  invalidate();
+}
+
+void WebLayerImplFixedBounds::setAnchorPoint(
+    const WebKit::WebFloatPoint& anchor_point) {
+  if (anchor_point != this->anchorPoint()) {
+    layer_->SetAnchorPoint(anchor_point);
+    UpdateLayerBoundsAndTransform();
+  }
+}
+
+void WebLayerImplFixedBounds::setBounds(const WebKit::WebSize& bounds) {
+  if (original_bounds_ != gfx::Size(bounds)) {
+      original_bounds_ = bounds;
+      UpdateLayerBoundsAndTransform();
+  }
+}
+
+WebKit::WebSize WebLayerImplFixedBounds::bounds() const {
+  return original_bounds_;
+}
+
+void WebLayerImplFixedBounds::setSublayerTransform(const SkMatrix44& matrix) {
+  gfx::Transform transform;
+  transform.matrix() = matrix;
+  SetSublayerTransformInternal(transform);
+}
+
+SkMatrix44 WebLayerImplFixedBounds::sublayerTransform() const {
+  return original_sublayer_transform_.matrix();
+}
+
+void WebLayerImplFixedBounds::setTransform(const SkMatrix44& matrix) {
+  gfx::Transform transform;
+  transform.matrix() = matrix;
+  SetTransformInternal(transform);
+}
+
+SkMatrix44 WebLayerImplFixedBounds::transform() const {
+  return original_transform_.matrix();
+}
+
+void WebLayerImplFixedBounds::SetFixedBounds(gfx::Size fixed_bounds) {
+  if (fixed_bounds_ != fixed_bounds) {
+    fixed_bounds_ = fixed_bounds;
+    UpdateLayerBoundsAndTransform();
+  }
+}
+
+void WebLayerImplFixedBounds::SetSublayerTransformInternal(
+    const gfx::Transform& transform) {
+  if (original_sublayer_transform_ != transform) {
+    original_sublayer_transform_ = transform;
+    UpdateLayerBoundsAndTransform();
+  }
+}
+
+void WebLayerImplFixedBounds::SetTransformInternal(
+    const gfx::Transform& transform) {
+  if (original_transform_ != transform) {
+    original_transform_ = transform;
+    UpdateLayerBoundsAndTransform();
+  }
+}
+
+void WebLayerImplFixedBounds::UpdateLayerBoundsAndTransform() {
+  if (fixed_bounds_.IsEmpty() || original_bounds_.IsEmpty() ||
+      fixed_bounds_ == original_bounds_ ||
+      // For now fall back to non-fixed bounds for non-zero anchor point.
+      // TODO(wangxianzhu): Support non-zero anchor point for fixed bounds.
+      anchorPoint().x || anchorPoint().y) {
+    layer_->SetBounds(original_bounds_);
+    layer_->SetTransform(original_transform_);
+    layer_->SetSublayerTransform(original_sublayer_transform_);
+    return;
+  }
+
+  layer_->SetBounds(fixed_bounds_);
+
+  // Apply bounds scale (bounds/fixed_bounds) over original transform.
+  gfx::Transform transform_with_bounds_scale(original_transform_);
+  float bounds_scale_x =
+      static_cast<float>(original_bounds_.width()) / fixed_bounds_.width();
+  float bounds_scale_y =
+      static_cast<float>(original_bounds_.height()) / fixed_bounds_.height();
+  transform_with_bounds_scale.Scale(bounds_scale_x, bounds_scale_y);
+  layer_->SetTransform(transform_with_bounds_scale);
+
+  // As we apply extra scale transform on this layer which will propagate to the
+  // sublayers, here undo the scale on sublayers.
+  gfx::Transform sublayer_transform_with_inverse_bounds_scale;
+  sublayer_transform_with_inverse_bounds_scale.Scale(1.f / bounds_scale_x,
+                                                     1.f / bounds_scale_y);
+  sublayer_transform_with_inverse_bounds_scale.PreconcatTransform(
+      original_sublayer_transform_);
+  layer_->SetSublayerTransform(sublayer_transform_with_inverse_bounds_scale);
+}
+
+}  // namespace WebKit
diff --git a/webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds.h b/webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds.h
new file mode 100644
index 0000000..84314d4
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds.h
@@ -0,0 +1,54 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_LAYER_IMPL_FIXED_BOUNDS_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_LAYER_IMPL_FIXED_BOUNDS_H_
+
+#include "ui/gfx/size.h"
+#include "ui/gfx/transform.h"
+#include "webkit/renderer/compositor_bindings/web_layer_impl.h"
+
+namespace webkit {
+
+// A special implementation of WebLayerImpl for layers that its contents
+// need to be automatically scaled when the bounds changes. The compositor
+// can efficiently handle the bounds change of such layers if the bounds
+// is fixed to a given value and the change of bounds are converted to
+// transformation scales.
+class WebLayerImplFixedBounds : public WebLayerImpl {
+ public:
+  WEBKIT_COMPOSITOR_BINDINGS_EXPORT WebLayerImplFixedBounds();
+  WEBKIT_COMPOSITOR_BINDINGS_EXPORT explicit WebLayerImplFixedBounds(
+      scoped_refptr<cc::Layer>);
+  virtual ~WebLayerImplFixedBounds();
+
+  // WebLayerImpl overrides.
+  virtual void invalidateRect(const WebKit::WebFloatRect& rect);
+  virtual void setAnchorPoint(const WebKit::WebFloatPoint& anchor_point);
+  virtual void setBounds(const WebKit::WebSize& bounds);
+  virtual WebKit::WebSize bounds() const;
+  virtual void setSublayerTransform(const SkMatrix44& transform);
+  virtual SkMatrix44 sublayerTransform() const;
+  virtual void setTransform(const SkMatrix44& transform);
+  virtual SkMatrix44 transform() const;
+
+  WEBKIT_COMPOSITOR_BINDINGS_EXPORT void SetFixedBounds(gfx::Size bounds);
+
+ protected:
+  void SetTransformInternal(const gfx::Transform& transform);
+  void SetSublayerTransformInternal(const gfx::Transform& transform);
+  void UpdateLayerBoundsAndTransform();
+
+  gfx::Transform original_sublayer_transform_;
+  gfx::Transform original_transform_;
+  gfx::Size original_bounds_;
+  gfx::Size fixed_bounds_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(WebLayerImplFixedBounds);
+};
+
+}  // namespace webkit
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_LAYER_IMPL_FIXED_BOUNDS_H_
diff --git a/webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds_unittest.cc b/webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds_unittest.cc
new file mode 100644
index 0000000..3b8798e
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds_unittest.cc
@@ -0,0 +1,200 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <vector>
+#include "cc/layers/picture_image_layer.h"
+#include "cc/test/geometry_test_utils.h"
+#include "cc/trees/layer_tree_host_common.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebFloatPoint.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
+#include "third_party/skia/include/utils/SkMatrix44.h"
+#include "ui/gfx/point3_f.h"
+#include "webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds.h"
+
+using WebKit::WebFloatPoint;
+using WebKit::WebSize;
+
+namespace webkit {
+namespace {
+
+TEST(WebLayerImplFixedBoundsTest, IdentityBounds) {
+  scoped_ptr<WebLayerImplFixedBounds> layer(new WebLayerImplFixedBounds());
+  layer->setAnchorPoint(WebFloatPoint(0, 0));
+  layer->SetFixedBounds(gfx::Size(100, 100));
+  layer->setBounds(WebSize(100, 100));
+  EXPECT_EQ(WebSize(100, 100), layer->bounds());
+  EXPECT_EQ(gfx::Size(100, 100), layer->layer()->bounds());
+  EXPECT_EQ(gfx::Transform(), layer->layer()->transform());
+}
+
+gfx::Point3F TransformPoint(const gfx::Transform& transform,
+                            const gfx::Point3F& point) {
+  gfx::Point3F result = point;
+  transform.TransformPoint(result);
+  return result;
+}
+
+void CheckBoundsScaleSimple(WebLayerImplFixedBounds* layer,
+                            const WebSize& bounds,
+                            const gfx::Size& fixed_bounds) {
+  layer->setBounds(bounds);
+  layer->SetFixedBounds(fixed_bounds);
+
+  EXPECT_EQ(bounds, layer->bounds());
+  EXPECT_EQ(fixed_bounds, layer->layer()->bounds());
+  EXPECT_TRUE(layer->transform().isIdentity());
+  EXPECT_TRUE(layer->sublayerTransform().isIdentity());
+
+  // An arbitrary point to check the scale and transforms.
+  gfx::Point3F original_point(10, 20, 1);
+  gfx::Point3F scaled_point(
+      original_point.x() * bounds.width / fixed_bounds.width(),
+      original_point.y() * bounds.height / fixed_bounds.height(),
+      original_point.z());
+  // Test if the bounds scale is correctly applied in transform and
+  // sublayerTransform.
+  EXPECT_POINT3F_EQ(scaled_point,
+                    TransformPoint(layer->layer()->transform(),
+                                   original_point));
+  EXPECT_POINT3F_EQ(original_point,
+                    TransformPoint(layer->layer()->sublayer_transform(),
+                                   scaled_point));
+}
+
+TEST(WebLayerImplFixedBoundsTest, BoundsScaleSimple) {
+  scoped_ptr<WebLayerImplFixedBounds> layer(new WebLayerImplFixedBounds());
+  layer->setAnchorPoint(WebFloatPoint(0, 0));
+  CheckBoundsScaleSimple(layer.get(), WebSize(100, 200), gfx::Size(150, 250));
+  // Change fixed_bounds.
+  CheckBoundsScaleSimple(layer.get(), WebSize(100, 200), gfx::Size(75, 100));
+  // Change bounds.
+  CheckBoundsScaleSimple(layer.get(), WebSize(300, 100), gfx::Size(75, 100));
+}
+
+void ExpectEqualLayerRectsInTarget(cc::Layer* layer1, cc::Layer* layer2) {
+  gfx::RectF layer1_rect_in_target(layer1->content_bounds());
+  layer1->draw_transform().TransformRect(&layer1_rect_in_target);
+
+  gfx::RectF layer2_rect_in_target(layer2->content_bounds());
+  layer2->draw_transform().TransformRect(&layer2_rect_in_target);
+
+  EXPECT_FLOAT_RECT_EQ(layer1_rect_in_target, layer2_rect_in_target);
+}
+
+void CompareFixedBoundsLayerAndNormalLayer(
+    const WebFloatPoint& anchor_point,
+    const gfx::Transform& transform,
+    const gfx::Transform& sublayer_transform) {
+  const gfx::Size kDeviceViewportSize(800, 600);
+  const float kDeviceScaleFactor = 2.f;
+  const float kPageScaleFactor = 1.5f;
+  const int kMaxTextureSize = 512;
+
+  WebSize bounds(150, 200);
+  WebFloatPoint position(20, 30);
+  WebSize sublayer_bounds(88, 99);
+  WebFloatPoint sublayer_position(50, 60);
+  gfx::Size fixed_bounds(160, 70);
+
+  scoped_ptr<WebLayerImplFixedBounds> root_layer(new WebLayerImplFixedBounds());
+
+  WebLayerImplFixedBounds* fixed_bounds_layer =
+      new WebLayerImplFixedBounds(cc::PictureImageLayer::Create());
+  WebLayerImpl* sublayer_under_fixed_bounds_layer = new WebLayerImpl();
+  sublayer_under_fixed_bounds_layer->setBounds(sublayer_bounds);
+  sublayer_under_fixed_bounds_layer->setPosition(sublayer_position);
+  fixed_bounds_layer->addChild(sublayer_under_fixed_bounds_layer);
+  fixed_bounds_layer->setBounds(bounds);
+  fixed_bounds_layer->SetFixedBounds(fixed_bounds);
+  fixed_bounds_layer->setAnchorPoint(anchor_point);
+  fixed_bounds_layer->setTransform(transform.matrix());
+  fixed_bounds_layer->setSublayerTransform(sublayer_transform.matrix());
+  fixed_bounds_layer->setPosition(position);
+  root_layer->addChild(fixed_bounds_layer);
+
+  WebLayerImpl* normal_layer(new WebLayerImpl(cc::PictureImageLayer::Create()));
+  WebLayerImpl* sublayer_under_normal_layer = new WebLayerImpl();
+  sublayer_under_normal_layer->setBounds(sublayer_bounds);
+  sublayer_under_normal_layer->setPosition(sublayer_position);
+
+  normal_layer->addChild(sublayer_under_normal_layer);
+  normal_layer->setBounds(bounds);
+  normal_layer->setAnchorPoint(anchor_point);
+  normal_layer->setTransform(transform.matrix());
+  normal_layer->setSublayerTransform(sublayer_transform.matrix());
+  normal_layer->setPosition(position);
+  root_layer->addChild(normal_layer);
+
+  std::vector<scoped_refptr<cc::Layer> > render_surface_layer_list;
+  cc::LayerTreeHostCommon::CalculateDrawProperties(
+      root_layer->layer(),
+      kDeviceViewportSize,
+      kDeviceScaleFactor,
+      kPageScaleFactor,
+      root_layer->layer(),
+      kMaxTextureSize,
+      false,  // can_use_lcd_text
+      false,  // can_adjust_raster_scales
+      &render_surface_layer_list);
+  ExpectEqualLayerRectsInTarget(normal_layer->layer(),
+                                fixed_bounds_layer->layer());
+  ExpectEqualLayerRectsInTarget(sublayer_under_normal_layer->layer(),
+                                sublayer_under_fixed_bounds_layer->layer());
+
+  // Change of fixed bounds should not affect the target geometries.
+  fixed_bounds_layer->SetFixedBounds(gfx::Size(fixed_bounds.width() / 2,
+                                               fixed_bounds.height() * 2));
+  cc::LayerTreeHostCommon::CalculateDrawProperties(
+      root_layer->layer(),
+      kDeviceViewportSize,
+      kDeviceScaleFactor,
+      kPageScaleFactor,
+      root_layer->layer(),
+      kMaxTextureSize,
+      false,  // can_use_lcd_text
+      false,  // can_adjust_raster_scales
+      &render_surface_layer_list);
+  ExpectEqualLayerRectsInTarget(normal_layer->layer(),
+                                fixed_bounds_layer->layer());
+  ExpectEqualLayerRectsInTarget(sublayer_under_normal_layer->layer(),
+                                sublayer_under_fixed_bounds_layer->layer());
+}
+
+// A black box test that ensures WebLayerImplFixedBounds won't change target
+// geometries. Simple case: identity transforms and zero anchor point.
+TEST(WebLayerImplFixedBoundsTest, CompareToWebLayerImplSimple) {
+  CompareFixedBoundsLayerAndNormalLayer(WebFloatPoint(0, 0),
+                                        gfx::Transform(),
+                                        gfx::Transform());
+}
+
+// A black box test that ensures WebLayerImplFixedBounds won't change target
+// geometries. Complex case: complex transforms and non-zero anchor point.
+TEST(WebLayerImplFixedBoundsTest, CompareToWebLayerImplComplex) {
+  gfx::Transform transform;
+  // These are arbitrary values that should not affect the results.
+  transform.Translate3d(50, 60, 70);
+  transform.Scale3d(2, 3, 4);
+  transform.RotateAbout(gfx::Vector3dF(33, 44, 55), 99);
+
+  gfx::Transform sublayer_transform;
+  // These are arbitrary values that should not affect the results.
+  sublayer_transform.Scale3d(1.1, 2.2, 3.3);
+  sublayer_transform.Translate3d(11, 22, 33);
+  sublayer_transform.RotateAbout(gfx::Vector3dF(10, 30, 20), 88);
+
+  CompareFixedBoundsLayerAndNormalLayer(WebFloatPoint(0, 0),
+                                        transform,
+                                        sublayer_transform);
+
+  // With non-zero anchor point, WebLayerImplFixedBounds will fall back to
+  // WebLayerImpl.
+  CompareFixedBoundsLayerAndNormalLayer(WebFloatPoint(0.4f, 0.6f),
+                                        transform,
+                                        sublayer_transform);
+}
+
+}  // namespace
+}  // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/web_rendering_stats_impl.h b/webkit/renderer/compositor_bindings/web_rendering_stats_impl.h
new file mode 100644
index 0000000..fef23ac
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_rendering_stats_impl.h
@@ -0,0 +1,21 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_RENDERING_STATS_IMPL_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_RENDERING_STATS_IMPL_H_
+
+#include "cc/debug/rendering_stats.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebRenderingStats.h"
+
+namespace WebKit {
+
+struct WebRenderingStatsImpl : public WebRenderingStats {
+  WebRenderingStatsImpl() {}
+
+  cc::RenderingStats rendering_stats;
+};
+
+}  // namespace WebKit
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_RENDERING_STATS_IMPL_H_
diff --git a/webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.cc b/webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.cc
new file mode 100644
index 0000000..d39b1fe
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.cc
@@ -0,0 +1,35 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.h"
+
+#include "cc/layers/scrollbar_layer.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebScrollbar.h"
+#include "webkit/renderer/compositor_bindings/scrollbar_impl.h"
+#include "webkit/renderer/compositor_bindings/web_layer_impl.h"
+
+using cc::ScrollbarLayer;
+
+namespace webkit {
+
+WebScrollbarLayerImpl::WebScrollbarLayerImpl(
+    WebKit::WebScrollbar* scrollbar,
+    WebKit::WebScrollbarThemePainter painter,
+    WebKit::WebScrollbarThemeGeometry* geometry)
+    : layer_(new WebLayerImpl(ScrollbarLayer::Create(
+          scoped_ptr<cc::Scrollbar>(new ScrollbarImpl(
+              make_scoped_ptr(scrollbar),
+              painter,
+              make_scoped_ptr(geometry))).Pass(), 0))) {}
+
+WebScrollbarLayerImpl::~WebScrollbarLayerImpl() {}
+
+WebKit::WebLayer* WebScrollbarLayerImpl::layer() { return layer_.get(); }
+
+void WebScrollbarLayerImpl::setScrollLayer(WebKit::WebLayer* layer) {
+  int id = layer ? static_cast<WebLayerImpl*>(layer)->layer()->id() : 0;
+  static_cast<ScrollbarLayer*>(layer_->layer())->SetScrollLayerId(id);
+}
+
+}  // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.h b/webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.h
new file mode 100644
index 0000000..7eb0ce2
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.h
@@ -0,0 +1,42 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_SCROLLBAR_LAYER_IMPL_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_SCROLLBAR_LAYER_IMPL_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebScrollbarLayer.h"
+#include "webkit/renderer/compositor_bindings/webkit_compositor_bindings_export.h"
+
+namespace WebKit {
+class WebScrollbar;
+class WebScrollbarThemeGeometry;
+class WebScrollbarThemePainter;
+}
+
+namespace webkit {
+
+class WebLayerImpl;
+
+class WebScrollbarLayerImpl : public WebKit::WebScrollbarLayer {
+ public:
+  WEBKIT_COMPOSITOR_BINDINGS_EXPORT WebScrollbarLayerImpl(
+      WebKit::WebScrollbar* scrollbar,
+      WebKit::WebScrollbarThemePainter painter,
+      WebKit::WebScrollbarThemeGeometry* geometry);
+  virtual ~WebScrollbarLayerImpl();
+
+  // WebKit::WebScrollbarLayer implementation.
+  virtual WebKit::WebLayer* layer();
+  virtual void setScrollLayer(WebKit::WebLayer* layer);
+
+ private:
+  scoped_ptr<WebLayerImpl> layer_;
+
+  DISALLOW_COPY_AND_ASSIGN(WebScrollbarLayerImpl);
+};
+
+}  // namespace webkit
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_SCROLLBAR_LAYER_IMPL_H_
diff --git a/webkit/renderer/compositor_bindings/web_solid_color_layer_impl.cc b/webkit/renderer/compositor_bindings/web_solid_color_layer_impl.cc
new file mode 100644
index 0000000..6ba1dee
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_solid_color_layer_impl.cc
@@ -0,0 +1,27 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/compositor_bindings/web_solid_color_layer_impl.h"
+
+#include "cc/layers/solid_color_layer.h"
+#include "webkit/renderer/compositor_bindings/web_layer_impl.h"
+
+using cc::SolidColorLayer;
+
+namespace webkit {
+
+WebSolidColorLayerImpl::WebSolidColorLayerImpl()
+    : layer_(new WebLayerImpl(SolidColorLayer::Create())) {
+  layer_->layer()->SetIsDrawable(true);
+}
+
+WebSolidColorLayerImpl::~WebSolidColorLayerImpl() {}
+
+WebKit::WebLayer* WebSolidColorLayerImpl::layer() { return layer_.get(); }
+
+void WebSolidColorLayerImpl::setBackgroundColor(WebKit::WebColor color) {
+  layer_->setBackgroundColor(color);
+}
+
+}  // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/web_solid_color_layer_impl.h b/webkit/renderer/compositor_bindings/web_solid_color_layer_impl.h
new file mode 100644
index 0000000..15a7e2a
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_solid_color_layer_impl.h
@@ -0,0 +1,34 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_SOLID_COLOR_LAYER_IMPL_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_SOLID_COLOR_LAYER_IMPL_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebColor.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebSolidColorLayer.h"
+#include "webkit/renderer/compositor_bindings/webkit_compositor_bindings_export.h"
+
+namespace webkit {
+class WebLayerImpl;
+
+class WebSolidColorLayerImpl : public WebKit::WebSolidColorLayer {
+ public:
+  WEBKIT_COMPOSITOR_BINDINGS_EXPORT WebSolidColorLayerImpl();
+  virtual ~WebSolidColorLayerImpl();
+
+  // WebKit::WebSolidColorLayer implementation.
+  virtual WebKit::WebLayer* layer();
+  virtual void setBackgroundColor(WebKit::WebColor);
+
+ private:
+  scoped_ptr<WebLayerImpl> layer_;
+
+  DISALLOW_COPY_AND_ASSIGN(WebSolidColorLayerImpl);
+};
+
+}  // namespace webkit
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_SOLID_COLOR_LAYER_IMPL_H_
+
diff --git a/webkit/renderer/compositor_bindings/web_to_ccscrollbar_theme_painter_adapter.cc b/webkit/renderer/compositor_bindings/web_to_ccscrollbar_theme_painter_adapter.cc
new file mode 100644
index 0000000..a15c35d
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_to_ccscrollbar_theme_painter_adapter.cc
@@ -0,0 +1,80 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/compositor_bindings/web_to_ccscrollbar_theme_painter_adapter.h"
+
+#include "third_party/WebKit/Source/Platform/chromium/public/WebRect.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebScrollbarThemePainter.h"
+
+using WebKit::WebScrollbarThemePainter;
+
+namespace webkit {
+
+WebToCCScrollbarThemePainterAdapter::
+WebToCCScrollbarThemePainterAdapter(
+    scoped_ptr<WebScrollbarThemePainter> web_painter)
+    : painter_(web_painter.Pass()) {}
+
+WebToCCScrollbarThemePainterAdapter::~WebToCCScrollbarThemePainterAdapter() {}
+
+void WebToCCScrollbarThemePainterAdapter::PaintScrollbarBackground(
+    SkCanvas* canvas,
+    gfx::Rect rect) {
+  painter_->paintScrollbarBackground(canvas, rect);
+}
+
+void WebToCCScrollbarThemePainterAdapter::PaintTrackBackground(
+    SkCanvas* canvas,
+    gfx::Rect rect) {
+  painter_->paintTrackBackground(canvas, rect);
+}
+
+void WebToCCScrollbarThemePainterAdapter::PaintBackTrackPart(
+    SkCanvas* canvas,
+    gfx::Rect rect) {
+  painter_->paintBackTrackPart(canvas, rect);
+}
+
+void WebToCCScrollbarThemePainterAdapter::PaintForwardTrackPart(
+    SkCanvas* canvas,
+    gfx::Rect rect) {
+  painter_->paintForwardTrackPart(canvas, rect);
+}
+
+void WebToCCScrollbarThemePainterAdapter::PaintBackButtonStart(
+    SkCanvas* canvas,
+    gfx::Rect rect) {
+  painter_->paintBackButtonStart(canvas, rect);
+}
+
+void WebToCCScrollbarThemePainterAdapter::PaintBackButtonEnd(
+    SkCanvas* canvas,
+    gfx::Rect rect) {
+  painter_->paintBackButtonEnd(canvas, rect);
+}
+
+void WebToCCScrollbarThemePainterAdapter::PaintForwardButtonStart(
+    SkCanvas* canvas,
+    gfx::Rect rect) {
+  painter_->paintForwardButtonStart(canvas, rect);
+}
+
+void WebToCCScrollbarThemePainterAdapter::PaintForwardButtonEnd(
+    SkCanvas* canvas,
+    gfx::Rect rect) {
+  painter_->paintForwardButtonEnd(canvas, rect);
+}
+
+void WebToCCScrollbarThemePainterAdapter::PaintTickmarks(
+    SkCanvas* canvas,
+    gfx::Rect rect) {
+  painter_->paintTickmarks(canvas, rect);
+}
+
+void WebToCCScrollbarThemePainterAdapter::PaintThumb(SkCanvas* canvas,
+                                                     gfx::Rect rect) {
+  painter_->paintThumb(canvas, rect);
+}
+
+}  // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/web_to_ccscrollbar_theme_painter_adapter.h b/webkit/renderer/compositor_bindings/web_to_ccscrollbar_theme_painter_adapter.h
new file mode 100644
index 0000000..d804ba8
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_to_ccscrollbar_theme_painter_adapter.h
@@ -0,0 +1,48 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_TO_CCSCROLLBAR_THEME_PAINTER_ADAPTER_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_TO_CCSCROLLBAR_THEME_PAINTER_ADAPTER_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "cc/layers/scrollbar_theme_painter.h"
+
+namespace WebKit { class WebScrollbarThemePainter; }
+
+namespace webkit {
+
+class WebToCCScrollbarThemePainterAdapter : public cc::ScrollbarThemePainter {
+ public:
+  static scoped_ptr<WebToCCScrollbarThemePainterAdapter> Create(
+      scoped_ptr<WebKit::WebScrollbarThemePainter> web_painter) {
+    return make_scoped_ptr(
+        new WebToCCScrollbarThemePainterAdapter(web_painter.Pass()));
+  }
+  virtual ~WebToCCScrollbarThemePainterAdapter();
+
+  virtual void PaintScrollbarBackground(SkCanvas* canvas,
+                                        gfx::Rect rect) OVERRIDE;
+  virtual void PaintTrackBackground(SkCanvas* canvas, gfx::Rect rect) OVERRIDE;
+  virtual void PaintBackTrackPart(SkCanvas* canvas, gfx::Rect rect) OVERRIDE;
+  virtual void PaintForwardTrackPart(SkCanvas* canvas, gfx::Rect rect) OVERRIDE;
+  virtual void PaintBackButtonStart(SkCanvas* canvas, gfx::Rect rect) OVERRIDE;
+  virtual void PaintBackButtonEnd(SkCanvas* canvas, gfx::Rect rect) OVERRIDE;
+  virtual void PaintForwardButtonStart(SkCanvas* canvas, gfx::Rect rect)
+      OVERRIDE;
+  virtual void PaintForwardButtonEnd(SkCanvas* canvas, gfx::Rect rect) OVERRIDE;
+  virtual void PaintTickmarks(SkCanvas* canvas, gfx::Rect rect) OVERRIDE;
+  virtual void PaintThumb(SkCanvas* canvas, gfx::Rect rect) OVERRIDE;
+
+ private:
+  explicit WebToCCScrollbarThemePainterAdapter(
+      scoped_ptr<WebKit::WebScrollbarThemePainter> web_painter);
+
+  scoped_ptr<WebKit::WebScrollbarThemePainter> painter_;
+
+  DISALLOW_COPY_AND_ASSIGN(WebToCCScrollbarThemePainterAdapter);
+};
+
+}  // namespace webkit
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_TO_CCSCROLLBAR_THEME_PAINTER_ADAPTER_H_
diff --git a/webkit/renderer/compositor_bindings/web_transform_animation_curve_impl.cc b/webkit/renderer/compositor_bindings/web_transform_animation_curve_impl.cc
new file mode 100644
index 0000000..0f04db4
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_transform_animation_curve_impl.cc
@@ -0,0 +1,60 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/compositor_bindings/web_transform_animation_curve_impl.h"
+
+#include "cc/animation/keyframed_animation_curve.h"
+#include "cc/animation/timing_function.h"
+#include "cc/animation/transform_operations.h"
+#include "webkit/renderer/compositor_bindings/web_animation_curve_common.h"
+#include "webkit/renderer/compositor_bindings/web_transform_operations_impl.h"
+
+using WebKit::WebTransformKeyframe;
+
+namespace webkit {
+
+WebTransformAnimationCurveImpl::WebTransformAnimationCurveImpl()
+    : curve_(cc::KeyframedTransformAnimationCurve::Create()) {}
+
+WebTransformAnimationCurveImpl::~WebTransformAnimationCurveImpl() {}
+
+WebKit::WebAnimationCurve::AnimationCurveType
+WebTransformAnimationCurveImpl::type() const {
+  return WebAnimationCurve::AnimationCurveTypeTransform;
+}
+
+void WebTransformAnimationCurveImpl::add(const WebTransformKeyframe& keyframe) {
+  add(keyframe, TimingFunctionTypeEase);
+}
+
+void WebTransformAnimationCurveImpl::add(const WebTransformKeyframe& keyframe,
+                                         TimingFunctionType type) {
+  const cc::TransformOperations& transform_operations =
+      static_cast<const webkit::WebTransformOperationsImpl&>(keyframe.value())
+      .AsTransformOperations();
+  curve_->AddKeyframe(cc::TransformKeyframe::Create(
+      keyframe.time(), transform_operations, CreateTimingFunction(type)));
+}
+
+void WebTransformAnimationCurveImpl::add(const WebTransformKeyframe& keyframe,
+                                         double x1,
+                                         double y1,
+                                         double x2,
+                                         double y2) {
+  const cc::TransformOperations& transform_operations =
+      static_cast<const webkit::WebTransformOperationsImpl&>(keyframe.value())
+      .AsTransformOperations();
+  curve_->AddKeyframe(cc::TransformKeyframe::Create(
+      keyframe.time(),
+      transform_operations,
+      cc::CubicBezierTimingFunction::Create(x1, y1, x2, y2)
+          .PassAs<cc::TimingFunction>()));
+}
+
+scoped_ptr<cc::AnimationCurve>
+WebTransformAnimationCurveImpl::CloneToAnimationCurve() const {
+  return curve_->Clone();
+}
+
+}  // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/web_transform_animation_curve_impl.h b/webkit/renderer/compositor_bindings/web_transform_animation_curve_impl.h
new file mode 100644
index 0000000..c32f175
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_transform_animation_curve_impl.h
@@ -0,0 +1,50 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_TRANSFORM_ANIMATION_CURVE_IMPL_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_TRANSFORM_ANIMATION_CURVE_IMPL_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebTransformAnimationCurve.h"
+#include "webkit/renderer/compositor_bindings/webkit_compositor_bindings_export.h"
+
+namespace cc {
+class AnimationCurve;
+class KeyframedTransformAnimationCurve;
+}
+
+namespace WebKit { class WebTransformKeyframe; }
+
+namespace webkit {
+
+class WebTransformAnimationCurveImpl
+    : public WebKit::WebTransformAnimationCurve {
+ public:
+  WEBKIT_COMPOSITOR_BINDINGS_EXPORT WebTransformAnimationCurveImpl();
+  virtual ~WebTransformAnimationCurveImpl();
+
+  // WebKit::WebAnimationCurve implementation.
+  virtual AnimationCurveType type() const;
+
+  // WebKit::WebTransformAnimationCurve implementation.
+  virtual void add(const WebKit::WebTransformKeyframe& keyframe);
+  virtual void add(const WebKit::WebTransformKeyframe& keyframe,
+                   TimingFunctionType type);
+  virtual void add(const WebKit::WebTransformKeyframe& keyframe,
+                   double x1,
+                   double y1,
+                   double x2,
+                   double y2);
+
+  scoped_ptr<cc::AnimationCurve> CloneToAnimationCurve() const;
+
+ private:
+  scoped_ptr<cc::KeyframedTransformAnimationCurve> curve_;
+
+  DISALLOW_COPY_AND_ASSIGN(WebTransformAnimationCurveImpl);
+};
+
+}  // namespace webkit
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_TRANSFORM_ANIMATION_CURVE_IMPL_H_
diff --git a/webkit/renderer/compositor_bindings/web_transform_operations_impl.cc b/webkit/renderer/compositor_bindings/web_transform_operations_impl.cc
new file mode 100644
index 0000000..131d820
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_transform_operations_impl.cc
@@ -0,0 +1,66 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/renderer/compositor_bindings/web_transform_operations_impl.h"
+
+#include <algorithm>
+
+#include "ui/gfx/transform.h"
+
+namespace webkit {
+
+WebTransformOperationsImpl::WebTransformOperationsImpl() {}
+
+const cc::TransformOperations&
+WebTransformOperationsImpl::AsTransformOperations() const {
+  return transform_operations_;
+}
+
+bool WebTransformOperationsImpl::canBlendWith(
+    const WebKit::WebTransformOperations& other) const {
+  const WebTransformOperationsImpl& other_impl =
+      static_cast<const WebTransformOperationsImpl&>(other);
+  return transform_operations_.CanBlendWith(other_impl.transform_operations_);
+}
+
+void WebTransformOperationsImpl::appendTranslate(double x, double y, double z) {
+  transform_operations_.AppendTranslate(x, y, z);
+}
+
+void WebTransformOperationsImpl::appendRotate(double x,
+                                              double y,
+                                              double z,
+                                              double degrees) {
+  transform_operations_.AppendRotate(x, y, z, degrees);
+}
+
+void WebTransformOperationsImpl::appendScale(double x, double y, double z) {
+  transform_operations_.AppendScale(x, y, z);
+}
+
+void WebTransformOperationsImpl::appendSkew(double x, double y) {
+  transform_operations_.AppendSkew(x, y);
+}
+
+void WebTransformOperationsImpl::appendPerspective(double depth) {
+  transform_operations_.AppendPerspective(depth);
+}
+
+void WebTransformOperationsImpl::appendMatrix(const SkMatrix44& matrix) {
+  gfx::Transform transform(gfx::Transform::kSkipInitialization);
+  transform.matrix() = matrix;
+  transform_operations_.AppendMatrix(transform);
+}
+
+void WebTransformOperationsImpl::appendIdentity() {
+  transform_operations_.AppendIdentity();
+}
+
+bool WebTransformOperationsImpl::isIdentity() const {
+  return transform_operations_.IsIdentity();
+}
+
+WebTransformOperationsImpl::~WebTransformOperationsImpl() {}
+
+}  // namespace webkit
diff --git a/webkit/renderer/compositor_bindings/web_transform_operations_impl.h b/webkit/renderer/compositor_bindings/web_transform_operations_impl.h
new file mode 100644
index 0000000..0307dc5
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/web_transform_operations_impl.h
@@ -0,0 +1,41 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_TRANSFORM_OPERATIONS_IMPL_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_TRANSFORM_OPERATIONS_IMPL_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "cc/animation/transform_operations.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebTransformOperations.h"
+#include "webkit/renderer/compositor_bindings/webkit_compositor_bindings_export.h"
+
+namespace webkit {
+
+class WebTransformOperationsImpl : public WebKit::WebTransformOperations {
+ public:
+  WEBKIT_COMPOSITOR_BINDINGS_EXPORT WebTransformOperationsImpl();
+  virtual ~WebTransformOperationsImpl();
+
+  const cc::TransformOperations& AsTransformOperations() const;
+
+  // Implementation of WebKit::WebTransformOperations methods
+  virtual bool canBlendWith(const WebKit::WebTransformOperations& other) const;
+  virtual void appendTranslate(double x, double y, double z);
+  virtual void appendRotate(double x, double y, double z, double degrees);
+  virtual void appendScale(double x, double y, double z);
+  virtual void appendSkew(double x, double y);
+  virtual void appendPerspective(double depth);
+  virtual void appendMatrix(const SkMatrix44&);
+  virtual void appendIdentity();
+  virtual bool isIdentity() const;
+
+ private:
+  cc::TransformOperations transform_operations_;
+
+  DISALLOW_COPY_AND_ASSIGN(WebTransformOperationsImpl);
+};
+
+}  // namespace webkit
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEB_TRANSFORM_OPERATIONS_IMPL_H_
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-arm.mk b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-arm.mk
new file mode 100644
index 0000000..6fb1a57
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-arm.mk
@@ -0,0 +1,201 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := webkit_renderer_compositor_bindings_webkit_compositor_bindings_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,gpu_gpu_gyp)/gpu.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_gyp)/skia_skia_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_ui_gyp)/ui_ui_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	webkit/renderer/compositor_bindings/scrollbar_impl.cc \
+	webkit/renderer/compositor_bindings/web_animation_curve_common.cc \
+	webkit/renderer/compositor_bindings/web_animation_impl.cc \
+	webkit/renderer/compositor_bindings/web_compositing_reasons.cc \
+	webkit/renderer/compositor_bindings/web_content_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_external_texture_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_float_animation_curve_impl.cc \
+	webkit/renderer/compositor_bindings/web_image_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds.cc \
+	webkit/renderer/compositor_bindings/web_to_ccscrollbar_theme_painter_adapter.cc \
+	webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_solid_color_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_transform_operations_impl.cc \
+	webkit/renderer/compositor_bindings/web_transform_animation_curve_impl.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-fno-tree-sra \
+	-fuse-ld=gold \
+	-Wno-psabi \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections
+
+MY_CFLAGS_C :=
+
+MY_DEFS := \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DUSE_LINUX_BREAKPAD' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DENABLE_DOUBLE_RESOURCE_LOAD_TIMING' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_GPU=1' \
+	'-DUSE_OPENSSL=1' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DENABLE_LANGUAGE_DETECTION=1' \
+	'-DWEBKIT_COMPOSITOR_BINDINGS_IMPLEMENTATION=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
+	'-DSK_BUILD_NO_IMAGE_ENCODE' \
+	'-DSK_DEFERRED_CANVAS_USES_GPIPE=1' \
+	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+	'-DGR_AGGRESSIVE_SHADER_OPTS=1' \
+	'-DSK_ENABLE_INST_COUNT=0' \
+	'-DSK_USE_POSIX_THREADS' \
+	'-DSK_BUILD_FOR_ANDROID' \
+	'-DU_USING_ICU_NAMESPACE=0' \
+	'-DPOSIX_AVOID_MMAP' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+LOCAL_CFLAGS := $(MY_CFLAGS_C) $(MY_CFLAGS) $(MY_DEFS)
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES := \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(LOCAL_PATH)/skia/config \
+	$(LOCAL_PATH)/third_party/skia/src/core \
+	$(LOCAL_PATH)/third_party/skia/include/config \
+	$(LOCAL_PATH)/third_party/skia/include/core \
+	$(LOCAL_PATH)/third_party/skia/include/effects \
+	$(LOCAL_PATH)/third_party/skia/include/pdf \
+	$(LOCAL_PATH)/third_party/skia/include/gpu \
+	$(LOCAL_PATH)/third_party/skia/include/gpu/gl \
+	$(LOCAL_PATH)/third_party/skia/include/pathops \
+	$(LOCAL_PATH)/third_party/skia/include/pipe \
+	$(LOCAL_PATH)/third_party/skia/include/ports \
+	$(LOCAL_PATH)/third_party/skia/include/utils \
+	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/third_party/WebKit/Source/Platform/chromium \
+	$(LOCAL_PATH)/third_party/WebKit/Source/Platform/chromium \
+	$(PWD)/external/icu4c/common \
+	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/npapi \
+	$(LOCAL_PATH)/third_party/npapi/bindings \
+	$(LOCAL_PATH)/v8/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES)
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-abi \
+	-Wno-error=c++0x-compat \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+### Rules for final target.
+
+LOCAL_LDFLAGS := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-Wl,-z,relro \
+	-Wl,-z,now \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--icf=safe \
+	-Wl,--gc-sections \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_STATIC_LIBRARIES := \
+	skia_skia_gyp \
+	ui_ui_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: webkit_renderer_compositor_bindings_webkit_compositor_bindings_gyp
+
+# Alias gyp target name.
+.PHONY: webkit_compositor_bindings
+webkit_compositor_bindings: webkit_renderer_compositor_bindings_webkit_compositor_bindings_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-x86.mk b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-x86.mk
new file mode 100644
index 0000000..91430f2
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.darwin-x86.mk
@@ -0,0 +1,199 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := webkit_renderer_compositor_bindings_webkit_compositor_bindings_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,gpu_gpu_gyp)/gpu.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_gyp)/skia_skia_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_ui_gyp)/ui_ui_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	webkit/renderer/compositor_bindings/scrollbar_impl.cc \
+	webkit/renderer/compositor_bindings/web_animation_curve_common.cc \
+	webkit/renderer/compositor_bindings/web_animation_impl.cc \
+	webkit/renderer/compositor_bindings/web_compositing_reasons.cc \
+	webkit/renderer/compositor_bindings/web_content_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_external_texture_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_float_animation_curve_impl.cc \
+	webkit/renderer/compositor_bindings/web_image_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds.cc \
+	webkit/renderer/compositor_bindings/web_to_ccscrollbar_theme_painter_adapter.cc \
+	webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_solid_color_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_transform_operations_impl.cc \
+	webkit/renderer/compositor_bindings/web_transform_animation_curve_impl.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-m32 \
+	-mmmx \
+	-march=pentium4 \
+	-msse2 \
+	-mfpmath=sse \
+	-fuse-ld=gold \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-fno-stack-protector \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections
+
+MY_CFLAGS_C :=
+
+MY_DEFS := \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DUSE_LINUX_BREAKPAD' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DENABLE_DOUBLE_RESOURCE_LOAD_TIMING' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_GPU=1' \
+	'-DUSE_OPENSSL=1' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DENABLE_LANGUAGE_DETECTION=1' \
+	'-DWEBKIT_COMPOSITOR_BINDINGS_IMPLEMENTATION=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
+	'-DSK_BUILD_NO_IMAGE_ENCODE' \
+	'-DSK_DEFERRED_CANVAS_USES_GPIPE=1' \
+	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+	'-DGR_AGGRESSIVE_SHADER_OPTS=1' \
+	'-DSK_ENABLE_INST_COUNT=0' \
+	'-DSK_USE_POSIX_THREADS' \
+	'-DSK_BUILD_FOR_ANDROID' \
+	'-DU_USING_ICU_NAMESPACE=0' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+LOCAL_CFLAGS := $(MY_CFLAGS_C) $(MY_CFLAGS) $(MY_DEFS)
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES := \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(LOCAL_PATH)/skia/config \
+	$(LOCAL_PATH)/third_party/skia/src/core \
+	$(LOCAL_PATH)/third_party/skia/include/config \
+	$(LOCAL_PATH)/third_party/skia/include/core \
+	$(LOCAL_PATH)/third_party/skia/include/effects \
+	$(LOCAL_PATH)/third_party/skia/include/pdf \
+	$(LOCAL_PATH)/third_party/skia/include/gpu \
+	$(LOCAL_PATH)/third_party/skia/include/gpu/gl \
+	$(LOCAL_PATH)/third_party/skia/include/pathops \
+	$(LOCAL_PATH)/third_party/skia/include/pipe \
+	$(LOCAL_PATH)/third_party/skia/include/ports \
+	$(LOCAL_PATH)/third_party/skia/include/utils \
+	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/third_party/WebKit/Source/Platform/chromium \
+	$(LOCAL_PATH)/third_party/WebKit/Source/Platform/chromium \
+	$(PWD)/external/icu4c/common \
+	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/npapi \
+	$(LOCAL_PATH)/third_party/npapi/bindings \
+	$(LOCAL_PATH)/v8/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES)
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-error=c++0x-compat \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+### Rules for final target.
+
+LOCAL_LDFLAGS := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-m32 \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--gc-sections \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_STATIC_LIBRARIES := \
+	skia_skia_gyp \
+	ui_ui_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: webkit_renderer_compositor_bindings_webkit_compositor_bindings_gyp
+
+# Alias gyp target name.
+.PHONY: webkit_compositor_bindings
+webkit_compositor_bindings: webkit_renderer_compositor_bindings_webkit_compositor_bindings_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-arm.mk b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-arm.mk
new file mode 100644
index 0000000..6fb1a57
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-arm.mk
@@ -0,0 +1,201 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := webkit_renderer_compositor_bindings_webkit_compositor_bindings_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,gpu_gpu_gyp)/gpu.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_gyp)/skia_skia_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_ui_gyp)/ui_ui_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	webkit/renderer/compositor_bindings/scrollbar_impl.cc \
+	webkit/renderer/compositor_bindings/web_animation_curve_common.cc \
+	webkit/renderer/compositor_bindings/web_animation_impl.cc \
+	webkit/renderer/compositor_bindings/web_compositing_reasons.cc \
+	webkit/renderer/compositor_bindings/web_content_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_external_texture_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_float_animation_curve_impl.cc \
+	webkit/renderer/compositor_bindings/web_image_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds.cc \
+	webkit/renderer/compositor_bindings/web_to_ccscrollbar_theme_painter_adapter.cc \
+	webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_solid_color_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_transform_operations_impl.cc \
+	webkit/renderer/compositor_bindings/web_transform_animation_curve_impl.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-fno-tree-sra \
+	-fuse-ld=gold \
+	-Wno-psabi \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections
+
+MY_CFLAGS_C :=
+
+MY_DEFS := \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DUSE_LINUX_BREAKPAD' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DENABLE_DOUBLE_RESOURCE_LOAD_TIMING' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_GPU=1' \
+	'-DUSE_OPENSSL=1' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DENABLE_LANGUAGE_DETECTION=1' \
+	'-DWEBKIT_COMPOSITOR_BINDINGS_IMPLEMENTATION=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
+	'-DSK_BUILD_NO_IMAGE_ENCODE' \
+	'-DSK_DEFERRED_CANVAS_USES_GPIPE=1' \
+	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+	'-DGR_AGGRESSIVE_SHADER_OPTS=1' \
+	'-DSK_ENABLE_INST_COUNT=0' \
+	'-DSK_USE_POSIX_THREADS' \
+	'-DSK_BUILD_FOR_ANDROID' \
+	'-DU_USING_ICU_NAMESPACE=0' \
+	'-DPOSIX_AVOID_MMAP' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+LOCAL_CFLAGS := $(MY_CFLAGS_C) $(MY_CFLAGS) $(MY_DEFS)
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES := \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(LOCAL_PATH)/skia/config \
+	$(LOCAL_PATH)/third_party/skia/src/core \
+	$(LOCAL_PATH)/third_party/skia/include/config \
+	$(LOCAL_PATH)/third_party/skia/include/core \
+	$(LOCAL_PATH)/third_party/skia/include/effects \
+	$(LOCAL_PATH)/third_party/skia/include/pdf \
+	$(LOCAL_PATH)/third_party/skia/include/gpu \
+	$(LOCAL_PATH)/third_party/skia/include/gpu/gl \
+	$(LOCAL_PATH)/third_party/skia/include/pathops \
+	$(LOCAL_PATH)/third_party/skia/include/pipe \
+	$(LOCAL_PATH)/third_party/skia/include/ports \
+	$(LOCAL_PATH)/third_party/skia/include/utils \
+	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/third_party/WebKit/Source/Platform/chromium \
+	$(LOCAL_PATH)/third_party/WebKit/Source/Platform/chromium \
+	$(PWD)/external/icu4c/common \
+	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/npapi \
+	$(LOCAL_PATH)/third_party/npapi/bindings \
+	$(LOCAL_PATH)/v8/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES)
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-abi \
+	-Wno-error=c++0x-compat \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+### Rules for final target.
+
+LOCAL_LDFLAGS := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-Wl,-z,relro \
+	-Wl,-z,now \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--icf=safe \
+	-Wl,--gc-sections \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_STATIC_LIBRARIES := \
+	skia_skia_gyp \
+	ui_ui_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: webkit_renderer_compositor_bindings_webkit_compositor_bindings_gyp
+
+# Alias gyp target name.
+.PHONY: webkit_compositor_bindings
+webkit_compositor_bindings: webkit_renderer_compositor_bindings_webkit_compositor_bindings_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-x86.mk b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-x86.mk
new file mode 100644
index 0000000..91430f2
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_bindings.target.linux-x86.mk
@@ -0,0 +1,199 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := webkit_renderer_compositor_bindings_webkit_compositor_bindings_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,GYP,gpu_gpu_gyp)/gpu.stamp \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_gyp)/skia_skia_gyp.a \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,ui_ui_gyp)/ui_ui_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	webkit/renderer/compositor_bindings/scrollbar_impl.cc \
+	webkit/renderer/compositor_bindings/web_animation_curve_common.cc \
+	webkit/renderer/compositor_bindings/web_animation_impl.cc \
+	webkit/renderer/compositor_bindings/web_compositing_reasons.cc \
+	webkit/renderer/compositor_bindings/web_content_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_external_texture_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_float_animation_curve_impl.cc \
+	webkit/renderer/compositor_bindings/web_image_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_layer_impl_fixed_bounds.cc \
+	webkit/renderer/compositor_bindings/web_to_ccscrollbar_theme_painter_adapter.cc \
+	webkit/renderer/compositor_bindings/web_scrollbar_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_solid_color_layer_impl.cc \
+	webkit/renderer/compositor_bindings/web_transform_operations_impl.cc \
+	webkit/renderer/compositor_bindings/web_transform_animation_curve_impl.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-m32 \
+	-mmmx \
+	-march=pentium4 \
+	-msse2 \
+	-mfpmath=sse \
+	-fuse-ld=gold \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-fno-stack-protector \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections
+
+MY_CFLAGS_C :=
+
+MY_DEFS := \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DUSE_LINUX_BREAKPAD' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DENABLE_DOUBLE_RESOURCE_LOAD_TIMING' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_GPU=1' \
+	'-DUSE_OPENSSL=1' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DENABLE_LANGUAGE_DETECTION=1' \
+	'-DWEBKIT_COMPOSITOR_BINDINGS_IMPLEMENTATION=1' \
+	'-DMEDIA_DISABLE_LIBVPX' \
+	'-DSK_BUILD_NO_IMAGE_ENCODE' \
+	'-DSK_DEFERRED_CANVAS_USES_GPIPE=1' \
+	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+	'-DGR_AGGRESSIVE_SHADER_OPTS=1' \
+	'-DSK_ENABLE_INST_COUNT=0' \
+	'-DSK_USE_POSIX_THREADS' \
+	'-DSK_BUILD_FOR_ANDROID' \
+	'-DU_USING_ICU_NAMESPACE=0' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+LOCAL_CFLAGS := $(MY_CFLAGS_C) $(MY_CFLAGS) $(MY_DEFS)
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES := \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(LOCAL_PATH)/skia/config \
+	$(LOCAL_PATH)/third_party/skia/src/core \
+	$(LOCAL_PATH)/third_party/skia/include/config \
+	$(LOCAL_PATH)/third_party/skia/include/core \
+	$(LOCAL_PATH)/third_party/skia/include/effects \
+	$(LOCAL_PATH)/third_party/skia/include/pdf \
+	$(LOCAL_PATH)/third_party/skia/include/gpu \
+	$(LOCAL_PATH)/third_party/skia/include/gpu/gl \
+	$(LOCAL_PATH)/third_party/skia/include/pathops \
+	$(LOCAL_PATH)/third_party/skia/include/pipe \
+	$(LOCAL_PATH)/third_party/skia/include/ports \
+	$(LOCAL_PATH)/third_party/skia/include/utils \
+	$(LOCAL_PATH)/skia/ext \
+	$(LOCAL_PATH)/third_party/WebKit/Source/Platform/chromium \
+	$(LOCAL_PATH)/third_party/WebKit/Source/Platform/chromium \
+	$(PWD)/external/icu4c/common \
+	$(PWD)/external/icu4c/i18n \
+	$(LOCAL_PATH)/third_party/npapi \
+	$(LOCAL_PATH)/third_party/npapi/bindings \
+	$(LOCAL_PATH)/v8/include \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES)
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-error=c++0x-compat \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+### Rules for final target.
+
+LOCAL_LDFLAGS := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-m32 \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--gc-sections \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_STATIC_LIBRARIES := \
+	skia_skia_gyp \
+	ui_ui_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: webkit_renderer_compositor_bindings_webkit_compositor_bindings_gyp
+
+# Alias gyp target name.
+.PHONY: webkit_compositor_bindings
+webkit_compositor_bindings: webkit_renderer_compositor_bindings_webkit_compositor_bindings_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_bindings_export.h b/webkit/renderer/compositor_bindings/webkit_compositor_bindings_export.h
new file mode 100644
index 0000000..77a698f
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_bindings_export.h
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEBKIT_COMPOSITOR_BINDINGS_EXPORT_H_
+#define WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEBKIT_COMPOSITOR_BINDINGS_EXPORT_H_
+
+#if defined(COMPONENT_BUILD)
+#if defined(WIN32)
+
+#if defined(WEBKIT_COMPOSITOR_BINDINGS_IMPLEMENTATION)
+#define WEBKIT_COMPOSITOR_BINDINGS_EXPORT __declspec(dllexport)
+#else
+#define WEBKIT_COMPOSITOR_BINDINGS_EXPORT __declspec(dllimport)
+#endif  // defined(WEBKIT_COMPOSITOR_BINDINGS_IMPLEMENTATION)
+
+#else  // defined(WIN32)
+#if defined(WEBKIT_COMPOSITOR_BINDINGS_IMPLEMENTATION)
+#define WEBKIT_COMPOSITOR_BINDINGS_EXPORT                                      \
+  __attribute__((visibility("default")))
+#else
+#define WEBKIT_COMPOSITOR_BINDINGS_EXPORT
+#endif
+#endif
+
+#else  // defined(COMPONENT_BUILD)
+#define WEBKIT_COMPOSITOR_BINDINGS_EXPORT
+#endif
+
+#endif  // WEBKIT_RENDERER_COMPOSITOR_BINDINGS_WEBKIT_COMPOSITOR_BINDINGS_EXPORT_H_
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-arm.mk b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-arm.mk
new file mode 100644
index 0000000..f694267
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-arm.mk
@@ -0,0 +1,175 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := webkit_renderer_compositor_bindings_webkit_compositor_support_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_gyp)/skia_skia_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	webkit/renderer/compositor_bindings/web_compositor_support_impl.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-fno-tree-sra \
+	-fuse-ld=gold \
+	-Wno-psabi \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections
+
+MY_CFLAGS_C :=
+
+MY_DEFS := \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DUSE_LINUX_BREAKPAD' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DENABLE_DOUBLE_RESOURCE_LOAD_TIMING' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_GPU=1' \
+	'-DUSE_OPENSSL=1' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DENABLE_LANGUAGE_DETECTION=1' \
+	'-DSK_BUILD_NO_IMAGE_ENCODE' \
+	'-DSK_DEFERRED_CANVAS_USES_GPIPE=1' \
+	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+	'-DGR_AGGRESSIVE_SHADER_OPTS=1' \
+	'-DSK_ENABLE_INST_COUNT=0' \
+	'-DSK_USE_POSIX_THREADS' \
+	'-DSK_BUILD_FOR_ANDROID' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+LOCAL_CFLAGS := $(MY_CFLAGS_C) $(MY_CFLAGS) $(MY_DEFS)
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES := \
+	$(LOCAL_PATH)/webkit \
+	$(gyp_shared_intermediate_dir)/webkit \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(LOCAL_PATH)/skia/config \
+	$(LOCAL_PATH)/third_party/skia/src/core \
+	$(LOCAL_PATH)/third_party/skia/include/config \
+	$(LOCAL_PATH)/third_party/skia/include/core \
+	$(LOCAL_PATH)/third_party/skia/include/effects \
+	$(LOCAL_PATH)/third_party/skia/include/pdf \
+	$(LOCAL_PATH)/third_party/skia/include/gpu \
+	$(LOCAL_PATH)/third_party/skia/include/gpu/gl \
+	$(LOCAL_PATH)/third_party/skia/include/pathops \
+	$(LOCAL_PATH)/third_party/skia/include/pipe \
+	$(LOCAL_PATH)/third_party/skia/include/ports \
+	$(LOCAL_PATH)/third_party/skia/include/utils \
+	$(LOCAL_PATH)/skia/ext \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES)
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-abi \
+	-Wno-error=c++0x-compat \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+### Rules for final target.
+
+LOCAL_LDFLAGS := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-Wl,-z,relro \
+	-Wl,-z,now \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--icf=safe \
+	-Wl,--gc-sections \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_STATIC_LIBRARIES := \
+	skia_skia_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: webkit_renderer_compositor_bindings_webkit_compositor_support_gyp
+
+# Alias gyp target name.
+.PHONY: webkit_compositor_support
+webkit_compositor_support: webkit_renderer_compositor_bindings_webkit_compositor_support_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-x86.mk b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-x86.mk
new file mode 100644
index 0000000..5b3a02d
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.darwin-x86.mk
@@ -0,0 +1,174 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := webkit_renderer_compositor_bindings_webkit_compositor_support_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_gyp)/skia_skia_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	webkit/renderer/compositor_bindings/web_compositor_support_impl.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-m32 \
+	-mmmx \
+	-march=pentium4 \
+	-msse2 \
+	-mfpmath=sse \
+	-fuse-ld=gold \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-fno-stack-protector \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections
+
+MY_CFLAGS_C :=
+
+MY_DEFS := \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DUSE_LINUX_BREAKPAD' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DENABLE_DOUBLE_RESOURCE_LOAD_TIMING' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_GPU=1' \
+	'-DUSE_OPENSSL=1' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DENABLE_LANGUAGE_DETECTION=1' \
+	'-DSK_BUILD_NO_IMAGE_ENCODE' \
+	'-DSK_DEFERRED_CANVAS_USES_GPIPE=1' \
+	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+	'-DGR_AGGRESSIVE_SHADER_OPTS=1' \
+	'-DSK_ENABLE_INST_COUNT=0' \
+	'-DSK_USE_POSIX_THREADS' \
+	'-DSK_BUILD_FOR_ANDROID' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+LOCAL_CFLAGS := $(MY_CFLAGS_C) $(MY_CFLAGS) $(MY_DEFS)
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES := \
+	$(LOCAL_PATH)/webkit \
+	$(gyp_shared_intermediate_dir)/webkit \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(LOCAL_PATH)/skia/config \
+	$(LOCAL_PATH)/third_party/skia/src/core \
+	$(LOCAL_PATH)/third_party/skia/include/config \
+	$(LOCAL_PATH)/third_party/skia/include/core \
+	$(LOCAL_PATH)/third_party/skia/include/effects \
+	$(LOCAL_PATH)/third_party/skia/include/pdf \
+	$(LOCAL_PATH)/third_party/skia/include/gpu \
+	$(LOCAL_PATH)/third_party/skia/include/gpu/gl \
+	$(LOCAL_PATH)/third_party/skia/include/pathops \
+	$(LOCAL_PATH)/third_party/skia/include/pipe \
+	$(LOCAL_PATH)/third_party/skia/include/ports \
+	$(LOCAL_PATH)/third_party/skia/include/utils \
+	$(LOCAL_PATH)/skia/ext \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES)
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-error=c++0x-compat \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+### Rules for final target.
+
+LOCAL_LDFLAGS := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-m32 \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--gc-sections \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_STATIC_LIBRARIES := \
+	skia_skia_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: webkit_renderer_compositor_bindings_webkit_compositor_support_gyp
+
+# Alias gyp target name.
+.PHONY: webkit_compositor_support
+webkit_compositor_support: webkit_renderer_compositor_bindings_webkit_compositor_support_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-arm.mk b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-arm.mk
new file mode 100644
index 0000000..f694267
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-arm.mk
@@ -0,0 +1,175 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := webkit_renderer_compositor_bindings_webkit_compositor_support_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_gyp)/skia_skia_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	webkit/renderer/compositor_bindings/web_compositor_support_impl.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS := \
+	-fstack-protector \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-fno-tree-sra \
+	-fuse-ld=gold \
+	-Wno-psabi \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fstack-protector \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections
+
+MY_CFLAGS_C :=
+
+MY_DEFS := \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DUSE_LINUX_BREAKPAD' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DENABLE_DOUBLE_RESOURCE_LOAD_TIMING' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_GPU=1' \
+	'-DUSE_OPENSSL=1' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DENABLE_LANGUAGE_DETECTION=1' \
+	'-DSK_BUILD_NO_IMAGE_ENCODE' \
+	'-DSK_DEFERRED_CANVAS_USES_GPIPE=1' \
+	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+	'-DGR_AGGRESSIVE_SHADER_OPTS=1' \
+	'-DSK_ENABLE_INST_COUNT=0' \
+	'-DSK_USE_POSIX_THREADS' \
+	'-DSK_BUILD_FOR_ANDROID' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+LOCAL_CFLAGS := $(MY_CFLAGS_C) $(MY_CFLAGS) $(MY_DEFS)
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES := \
+	$(LOCAL_PATH)/webkit \
+	$(gyp_shared_intermediate_dir)/webkit \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(LOCAL_PATH)/skia/config \
+	$(LOCAL_PATH)/third_party/skia/src/core \
+	$(LOCAL_PATH)/third_party/skia/include/config \
+	$(LOCAL_PATH)/third_party/skia/include/core \
+	$(LOCAL_PATH)/third_party/skia/include/effects \
+	$(LOCAL_PATH)/third_party/skia/include/pdf \
+	$(LOCAL_PATH)/third_party/skia/include/gpu \
+	$(LOCAL_PATH)/third_party/skia/include/gpu/gl \
+	$(LOCAL_PATH)/third_party/skia/include/pathops \
+	$(LOCAL_PATH)/third_party/skia/include/pipe \
+	$(LOCAL_PATH)/third_party/skia/include/ports \
+	$(LOCAL_PATH)/third_party/skia/include/utils \
+	$(LOCAL_PATH)/skia/ext \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES)
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-abi \
+	-Wno-error=c++0x-compat \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+### Rules for final target.
+
+LOCAL_LDFLAGS := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-Wl,-z,relro \
+	-Wl,-z,now \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--icf=safe \
+	-Wl,--gc-sections \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_STATIC_LIBRARIES := \
+	skia_skia_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: webkit_renderer_compositor_bindings_webkit_compositor_support_gyp
+
+# Alias gyp target name.
+.PHONY: webkit_compositor_support
+webkit_compositor_support: webkit_renderer_compositor_bindings_webkit_compositor_support_gyp
+
+include $(BUILD_STATIC_LIBRARY)
diff --git a/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-x86.mk b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-x86.mk
new file mode 100644
index 0000000..5b3a02d
--- /dev/null
+++ b/webkit/renderer/compositor_bindings/webkit_compositor_support.target.linux-x86.mk
@@ -0,0 +1,174 @@
+# This file is generated by gyp; do not edit.
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_MODULE := webkit_renderer_compositor_bindings_webkit_compositor_support_gyp
+LOCAL_MODULE_SUFFIX := .a
+LOCAL_MODULE_TAGS := optional
+gyp_intermediate_dir := $(call local-intermediates-dir)
+gyp_shared_intermediate_dir := $(call intermediates-dir-for,GYP,shared)
+
+# Make sure our deps are built first.
+GYP_TARGET_DEPENDENCIES := \
+	$(call intermediates-dir-for,STATIC_LIBRARIES,skia_skia_gyp)/skia_skia_gyp.a
+
+GYP_GENERATED_OUTPUTS :=
+
+# Make sure our deps and generated files are built first.
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GYP_TARGET_DEPENDENCIES) $(GYP_GENERATED_OUTPUTS)
+
+LOCAL_CPP_EXTENSION := .cc
+LOCAL_GENERATED_SOURCES :=
+
+GYP_COPIED_SOURCE_ORIGIN_DIRS :=
+
+LOCAL_SRC_FILES := \
+	webkit/renderer/compositor_bindings/web_compositor_support_impl.cc
+
+
+# Flags passed to both C and C++ files.
+MY_CFLAGS := \
+	--param=ssp-buffer-size=4 \
+	-Werror \
+	-fno-exceptions \
+	-fno-strict-aliasing \
+	-Wall \
+	-Wno-unused-parameter \
+	-Wno-missing-field-initializers \
+	-fvisibility=hidden \
+	-pipe \
+	-fPIC \
+	-m32 \
+	-mmmx \
+	-march=pentium4 \
+	-msse2 \
+	-mfpmath=sse \
+	-fuse-ld=gold \
+	-ffunction-sections \
+	-funwind-tables \
+	-g \
+	-fno-short-enums \
+	-finline-limit=64 \
+	-Wa,--noexecstack \
+	-U_FORTIFY_SOURCE \
+	-Wno-extra \
+	-Wno-ignored-qualifiers \
+	-Wno-type-limits \
+	-fno-stack-protector \
+	-Os \
+	-g \
+	-fomit-frame-pointer \
+	-fdata-sections \
+	-ffunction-sections
+
+MY_CFLAGS_C :=
+
+MY_DEFS := \
+	'-D_FILE_OFFSET_BITS=64' \
+	'-DUSE_LINUX_BREAKPAD' \
+	'-DNO_TCMALLOC' \
+	'-DDISABLE_NACL' \
+	'-DCHROMIUM_BUILD' \
+	'-DENABLE_DOUBLE_RESOURCE_LOAD_TIMING' \
+	'-DUSE_LIBJPEG_TURBO=1' \
+	'-DUSE_PROPRIETARY_CODECS' \
+	'-DENABLE_GPU=1' \
+	'-DUSE_OPENSSL=1' \
+	'-DENABLE_EGLIMAGE=1' \
+	'-DENABLE_LANGUAGE_DETECTION=1' \
+	'-DSK_BUILD_NO_IMAGE_ENCODE' \
+	'-DSK_DEFERRED_CANVAS_USES_GPIPE=1' \
+	'-DGR_GL_CUSTOM_SETUP_HEADER="GrGLConfig_chrome.h"' \
+	'-DGR_AGGRESSIVE_SHADER_OPTS=1' \
+	'-DSK_ENABLE_INST_COUNT=0' \
+	'-DSK_USE_POSIX_THREADS' \
+	'-DSK_BUILD_FOR_ANDROID' \
+	'-D__STDC_CONSTANT_MACROS' \
+	'-D__STDC_FORMAT_MACROS' \
+	'-DANDROID' \
+	'-D__GNU_SOURCE=1' \
+	'-DUSE_STLPORT=1' \
+	'-D_STLP_USE_PTR_SPECIALIZATIONS=1' \
+	'-DCHROME_BUILD_ID=""' \
+	'-DDYNAMIC_ANNOTATIONS_ENABLED=1' \
+	'-DWTF_USE_DYNAMIC_ANNOTATIONS=1' \
+	'-D_DEBUG'
+
+LOCAL_CFLAGS := $(MY_CFLAGS_C) $(MY_CFLAGS) $(MY_DEFS)
+
+# Include paths placed before CFLAGS/CPPFLAGS
+LOCAL_C_INCLUDES := \
+	$(LOCAL_PATH)/webkit \
+	$(gyp_shared_intermediate_dir)/webkit \
+	$(gyp_shared_intermediate_dir)/shim_headers/ashmem/target \
+	$(LOCAL_PATH) \
+	$(LOCAL_PATH)/third_party/khronos \
+	$(LOCAL_PATH)/gpu \
+	$(gyp_shared_intermediate_dir)/shim_headers/icui18n/target \
+	$(gyp_shared_intermediate_dir)/shim_headers/icuuc/target \
+	$(LOCAL_PATH)/skia/config \
+	$(LOCAL_PATH)/third_party/skia/src/core \
+	$(LOCAL_PATH)/third_party/skia/include/config \
+	$(LOCAL_PATH)/third_party/skia/include/core \
+	$(LOCAL_PATH)/third_party/skia/include/effects \
+	$(LOCAL_PATH)/third_party/skia/include/pdf \
+	$(LOCAL_PATH)/third_party/skia/include/gpu \
+	$(LOCAL_PATH)/third_party/skia/include/gpu/gl \
+	$(LOCAL_PATH)/third_party/skia/include/pathops \
+	$(LOCAL_PATH)/third_party/skia/include/pipe \
+	$(LOCAL_PATH)/third_party/skia/include/ports \
+	$(LOCAL_PATH)/third_party/skia/include/utils \
+	$(LOCAL_PATH)/skia/ext \
+	$(PWD)/frameworks/wilhelm/include \
+	$(PWD)/bionic \
+	$(PWD)/external/stlport/stlport
+
+LOCAL_C_INCLUDES := $(GYP_COPIED_SOURCE_ORIGIN_DIRS) $(LOCAL_C_INCLUDES)
+
+# Flags passed to only C++ (and not C) files.
+LOCAL_CPPFLAGS := \
+	-fno-rtti \
+	-fno-threadsafe-statics \
+	-fvisibility-inlines-hidden \
+	-Wsign-compare \
+	-Wno-error=c++0x-compat \
+	-Wno-non-virtual-dtor \
+	-Wno-sign-promo
+
+### Rules for final target.
+
+LOCAL_LDFLAGS := \
+	-Wl,-z,now \
+	-Wl,-z,relro \
+	-Wl,-z,noexecstack \
+	-fPIC \
+	-m32 \
+	-fuse-ld=gold \
+	-nostdlib \
+	-Wl,--no-undefined \
+	-Wl,--exclude-libs=ALL \
+	-Wl,--gc-sections \
+	-Wl,-O1 \
+	-Wl,--as-needed
+
+
+LOCAL_STATIC_LIBRARIES := \
+	skia_skia_gyp
+
+# Enable grouping to fix circular references
+LOCAL_GROUP_STATIC_LIBRARIES := true
+
+LOCAL_SHARED_LIBRARIES := \
+	libstlport \
+	libdl
+
+# Add target alias to "gyp_all_modules" target.
+.PHONY: gyp_all_modules
+gyp_all_modules: webkit_renderer_compositor_bindings_webkit_compositor_support_gyp
+
+# Alias gyp target name.
+.PHONY: webkit_compositor_support
+webkit_compositor_support: webkit_renderer_compositor_bindings_webkit_compositor_support_gyp
+
+include $(BUILD_STATIC_LIBRARY)