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 23 WebKitPlatformSupportChildImpl::WebKitPlatformSupportChildImpl() 24 : current_thread_slot_(&DestroyCurrentThread), 25 fling_curve_configuration_(new FlingCurveConfiguration) {} 26 27 WebKitPlatformSupportChildImpl::~WebKitPlatformSupportChildImpl() {} 28 29 WebThemeEngine* WebKitPlatformSupportChildImpl::themeEngine() { 30 return &native_theme_engine_; 31 } 32 33 WebFallbackThemeEngine* WebKitPlatformSupportChildImpl::fallbackThemeEngine() { 34 return &fallback_theme_engine_; 35 } 36 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* 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 61 blink::WebThread* WebKitPlatformSupportChildImpl::createThread( 62 const char* name) { 63 return new WebThreadImpl(name); 64 } 65 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 82 void WebKitPlatformSupportChildImpl::didStartWorkerRunLoop( 83 const blink::WebWorkerRunLoop& runLoop) { 84 WorkerTaskRunner* worker_task_runner = WorkerTaskRunner::Instance(); 85 worker_task_runner->OnWorkerRunLoopStarted(runLoop); 86 } 87 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* 95 WebKitPlatformSupportChildImpl::allocateAndLockDiscardableMemory(size_t bytes) { 96 if (!base::DiscardableMemory::SupportedNatively()) 97 return NULL; 98 return WebDiscardableMemoryImpl::CreateLockedMemory(bytes).release(); 99 } 100 101 // static 102 void WebKitPlatformSupportChildImpl::DestroyCurrentThread(void* thread) { 103 WebThreadImplForMessageLoop* impl = 104 static_cast<WebThreadImplForMessageLoop*>(thread); 105 delete impl; 106 } 107 108 } // namespace webkit_glue 109