• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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