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)