1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "webkit/child/webkitplatformsupport_child_impl.h"
6
7 #include "base/memory/discardable_memory.h"
8 #include "third_party/WebKit/public/web/WebInputEvent.h"
9 #include "webkit/child/fling_curve_configuration.h"
10 #include "webkit/child/web_discardable_memory_impl.h"
11 #include "webkit/child/webthread_impl.h"
12 #include "webkit/child/worker_task_runner.h"
13
14 #if defined(OS_ANDROID)
15 #include "webkit/child/fling_animator_impl_android.h"
16 #endif
17
18 using blink::WebFallbackThemeEngine;
19 using blink::WebThemeEngine;
20
21 namespace webkit_glue {
22
WebKitPlatformSupportChildImpl()23 WebKitPlatformSupportChildImpl::WebKitPlatformSupportChildImpl()
24 : current_thread_slot_(&DestroyCurrentThread),
25 fling_curve_configuration_(new FlingCurveConfiguration) {}
26
~WebKitPlatformSupportChildImpl()27 WebKitPlatformSupportChildImpl::~WebKitPlatformSupportChildImpl() {}
28
themeEngine()29 WebThemeEngine* WebKitPlatformSupportChildImpl::themeEngine() {
30 return &native_theme_engine_;
31 }
32
fallbackThemeEngine()33 WebFallbackThemeEngine* WebKitPlatformSupportChildImpl::fallbackThemeEngine() {
34 return &fallback_theme_engine_;
35 }
36
SetFlingCurveParameters(const std::vector<float> & new_touchpad,const std::vector<float> & new_touchscreen)37 void WebKitPlatformSupportChildImpl::SetFlingCurveParameters(
38 const std::vector<float>& new_touchpad,
39 const std::vector<float>& new_touchscreen) {
40 fling_curve_configuration_->SetCurveParameters(new_touchpad, new_touchscreen);
41 }
42
43 blink::WebGestureCurve*
createFlingAnimationCurve(int device_source,const blink::WebFloatPoint & velocity,const blink::WebSize & cumulative_scroll)44 WebKitPlatformSupportChildImpl::createFlingAnimationCurve(
45 int device_source,
46 const blink::WebFloatPoint& velocity,
47 const blink::WebSize& cumulative_scroll) {
48 #if defined(OS_ANDROID)
49 return FlingAnimatorImpl::CreateAndroidGestureCurve(velocity,
50 cumulative_scroll);
51 #endif
52
53 if (device_source == blink::WebGestureEvent::Touchscreen)
54 return fling_curve_configuration_->CreateForTouchScreen(velocity,
55 cumulative_scroll);
56
57 return fling_curve_configuration_->CreateForTouchPad(velocity,
58 cumulative_scroll);
59 }
60
createThread(const char * name)61 blink::WebThread* WebKitPlatformSupportChildImpl::createThread(
62 const char* name) {
63 return new WebThreadImpl(name);
64 }
65
currentThread()66 blink::WebThread* WebKitPlatformSupportChildImpl::currentThread() {
67 WebThreadImplForMessageLoop* thread =
68 static_cast<WebThreadImplForMessageLoop*>(current_thread_slot_.Get());
69 if (thread)
70 return (thread);
71
72 scoped_refptr<base::MessageLoopProxy> message_loop =
73 base::MessageLoopProxy::current();
74 if (!message_loop.get())
75 return NULL;
76
77 thread = new WebThreadImplForMessageLoop(message_loop.get());
78 current_thread_slot_.Set(thread);
79 return thread;
80 }
81
didStartWorkerRunLoop(const blink::WebWorkerRunLoop & runLoop)82 void WebKitPlatformSupportChildImpl::didStartWorkerRunLoop(
83 const blink::WebWorkerRunLoop& runLoop) {
84 WorkerTaskRunner* worker_task_runner = WorkerTaskRunner::Instance();
85 worker_task_runner->OnWorkerRunLoopStarted(runLoop);
86 }
87
didStopWorkerRunLoop(const blink::WebWorkerRunLoop & runLoop)88 void WebKitPlatformSupportChildImpl::didStopWorkerRunLoop(
89 const blink::WebWorkerRunLoop& runLoop) {
90 WorkerTaskRunner* worker_task_runner = WorkerTaskRunner::Instance();
91 worker_task_runner->OnWorkerRunLoopStopped(runLoop);
92 }
93
94 blink::WebDiscardableMemory*
allocateAndLockDiscardableMemory(size_t bytes)95 WebKitPlatformSupportChildImpl::allocateAndLockDiscardableMemory(size_t bytes) {
96 if (!base::DiscardableMemory::SupportedNatively())
97 return NULL;
98 return WebDiscardableMemoryImpl::CreateLockedMemory(bytes).release();
99 }
100
101 // static
DestroyCurrentThread(void * thread)102 void WebKitPlatformSupportChildImpl::DestroyCurrentThread(void* thread) {
103 WebThreadImplForMessageLoop* impl =
104 static_cast<WebThreadImplForMessageLoop*>(thread);
105 delete impl;
106 }
107
108 } // namespace webkit_glue
109