18f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian/*
26c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * Copyright (C) 2009-2010 Google Inc. All rights reserved.
38f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *
48f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Redistribution and use in source and binary forms, with or without
58f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * modification, are permitted provided that the following conditions are
68f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * met:
78f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *
88f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *     * Redistributions of source code must retain the above copyright
98f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * notice, this list of conditions and the following disclaimer.
108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *     * Redistributions in binary form must reproduce the above
118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * copyright notice, this list of conditions and the following disclaimer
128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * in the documentation and/or other materials provided with the
138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * distribution.
148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *     * Neither the name of Google Inc. nor the names of its
158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * contributors may be used to endorse or promote products derived from
168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * this software without specific prior written permission.
178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *
188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
248f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
258f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
268f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
278f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
288f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
298f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian */
308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
31e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#ifndef CrossThreadTask_h
32e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#define CrossThreadTask_h
338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
348f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "CrossThreadCopier.h"
358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "ScriptExecutionContext.h"
368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include <memory>
370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <wtf/PassOwnPtr.h>
388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include <wtf/PassRefPtr.h>
398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include <wtf/TypeTraits.h>
408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qiannamespace WebCore {
428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
43e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block// Traits for the CrossThreadTask.
44e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blocktemplate<typename T> struct CrossThreadTaskTraits {
456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    typedef const T& ParamType;
466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen};
476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
48e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blocktemplate<typename T> struct CrossThreadTaskTraits<T*> {
496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    typedef T* ParamType;
506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen};
516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
52e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blocktemplate<typename T> struct CrossThreadTaskTraits<PassRefPtr<T> > {
536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    typedef PassRefPtr<T> ParamType;
546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen};
556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
56e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blocktemplate<typename T> struct CrossThreadTaskTraits<PassOwnPtr<T> > {
576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    typedef PassOwnPtr<T> ParamType;
586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen};
596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1>
61e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockclass CrossThreadTask1 : public ScriptExecutionContext::Task {
626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenpublic:
636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    typedef void (*Method)(ScriptExecutionContext*, MP1);
64e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef CrossThreadTask1<P1, MP1> CrossThreadTask;
65e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
67e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1)
686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
69e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        return new CrossThreadTask(method, parameter1);
706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
73e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    CrossThreadTask1(Method method, Param1 parameter1)
746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        : m_method(method)
756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter1(parameter1)
766c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
776c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
786c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
796c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    virtual void performTask(ScriptExecutionContext* context)
806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        (*m_method)(context, m_parameter1);
826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    Method m_method;
866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P1 m_parameter1;
876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen};
886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1, typename P2, typename MP2>
90e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockclass CrossThreadTask2 : public ScriptExecutionContext::Task {
916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenpublic:
926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    typedef void (*Method)(ScriptExecutionContext*, MP1, MP2);
93e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef CrossThreadTask2<P1, MP1, P2, MP2> CrossThreadTask;
94e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
95e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
966c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
97e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2)
986c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
99e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        return new CrossThreadTask(method, parameter1, parameter2);
1006c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
1016c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1026c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
103e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    CrossThreadTask2(Method method, Param1 parameter1, Param2 parameter2)
1046c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        : m_method(method)
1056c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter1(parameter1)
1066c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter2(parameter2)
1076c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
1086c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
1096c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1106c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    virtual void performTask(ScriptExecutionContext* context)
1116c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
1126c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        (*m_method)(context, m_parameter1, m_parameter2);
1136c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
1146c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1156c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
1166c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    Method m_method;
1176c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P1 m_parameter1;
1186c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P2 m_parameter2;
1196c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen};
1206c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1216c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3>
122e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockclass CrossThreadTask3 : public ScriptExecutionContext::Task {
1236c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenpublic:
1246c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    typedef void (*Method)(ScriptExecutionContext*, MP1, MP2, MP3);
125e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef CrossThreadTask3<P1, MP1, P2, MP2, P3, MP3> CrossThreadTask;
126e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
127e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
128e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
1296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
130e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3)
1316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
132e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        return new CrossThreadTask(method, parameter1, parameter2, parameter3);
1336c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
1346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
136e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    CrossThreadTask3(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3)
1376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        : m_method(method)
1386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter1(parameter1)
1396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter2(parameter2)
1406c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter3(parameter3)
1416c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
1426c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
1436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1446c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    virtual void performTask(ScriptExecutionContext* context)
1456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
1466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        (*m_method)(context, m_parameter1, m_parameter2, m_parameter3);
1476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
1486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
1506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    Method m_method;
1516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P1 m_parameter1;
1526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P2 m_parameter2;
1536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P3 m_parameter3;
1546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen};
1556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4>
157e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockclass CrossThreadTask4 : public ScriptExecutionContext::Task {
1586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenpublic:
1596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    typedef void (*Method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4);
160e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef CrossThreadTask4<P1, MP1, P2, MP2, P3, MP3, P4, MP4> CrossThreadTask;
161e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
162e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
163e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
164e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P4>::ParamType Param4;
1656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
166e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4)
1676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
168e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        return new CrossThreadTask(method, parameter1, parameter2, parameter3, parameter4);
1696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
1706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
172e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    CrossThreadTask4(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4)
1736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        : m_method(method)
1746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter1(parameter1)
1756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter2(parameter2)
1766c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter3(parameter3)
1776c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter4(parameter4)
1786c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
1796c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
1806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    virtual void performTask(ScriptExecutionContext* context)
1826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
1836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        (*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_parameter4);
1846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
1856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
1876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    Method m_method;
1886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P1 m_parameter1;
1896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P2 m_parameter2;
1906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P3 m_parameter3;
1916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P4 m_parameter4;
1926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen};
1936c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
1946c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5>
195e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockclass CrossThreadTask5 : public ScriptExecutionContext::Task {
1966c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenpublic:
1976c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    typedef void (*Method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5);
198e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef CrossThreadTask5<P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5> CrossThreadTask;
199e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
200e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
201e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
202e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P4>::ParamType Param4;
203e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P5>::ParamType Param5;
204e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
205e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5)
2066c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
207e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        return new CrossThreadTask(method, parameter1, parameter2, parameter3, parameter4, parameter5);
2086c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
2096c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
2106c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
211e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    CrossThreadTask5(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5)
2120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        : m_method(method)
2130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        , m_parameter1(parameter1)
2140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        , m_parameter2(parameter2)
2150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        , m_parameter3(parameter3)
2160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        , m_parameter4(parameter4)
2170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        , m_parameter5(parameter5)
2188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    {
2198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    }
2208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
2216c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    virtual void performTask(ScriptExecutionContext* context)
2228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    {
2236c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        (*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_parameter4, m_parameter5);
2248f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    }
2258f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
2266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
2276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    Method m_method;
2286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P1 m_parameter1;
2296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P2 m_parameter2;
2306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P3 m_parameter3;
2316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P4 m_parameter4;
2326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P5 m_parameter5;
2336c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen};
2346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
2356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6>
236e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockclass CrossThreadTask6 : public ScriptExecutionContext::Task {
2376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenpublic:
2386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    typedef void (*Method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6);
239e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef CrossThreadTask6<P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5, P6, MP6> CrossThreadTask;
240e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
241e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
242e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
243e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P4>::ParamType Param4;
244e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P5>::ParamType Param5;
245e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P6>::ParamType Param6;
246e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
247e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Param6 parameter6)
2488f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    {
249e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        return new CrossThreadTask(method, parameter1, parameter2, parameter3, parameter4, parameter5, parameter6);
2508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    }
2518f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
2526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
253e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    CrossThreadTask6(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Param6 parameter6)
2546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        : m_method(method)
2556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter1(parameter1)
2566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter2(parameter2)
2576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter3(parameter3)
2586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter4(parameter4)
2596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter5(parameter5)
2606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter6(parameter6)
2616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
2626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
2636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
2646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    virtual void performTask(ScriptExecutionContext* context)
2658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    {
2666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        (*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_parameter4, m_parameter5, m_parameter6);
2678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    }
2688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
2696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
2706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    Method m_method;
2716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P1 m_parameter1;
2726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P2 m_parameter2;
2736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P3 m_parameter3;
2746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P4 m_parameter4;
2756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P5 m_parameter5;
2766c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P6 m_parameter6;
2776c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen};
2786c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
2796c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6, typename P7, typename MP7>
280e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockclass CrossThreadTask7 : public ScriptExecutionContext::Task {
2816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenpublic:
2826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    typedef void (*Method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6, MP7);
283e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef CrossThreadTask7<P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5, P6, MP6, P7, MP7> CrossThreadTask;
284e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
285e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
286e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
287e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P4>::ParamType Param4;
288e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P5>::ParamType Param5;
289e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P6>::ParamType Param6;
290e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P7>::ParamType Param7;
291e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block
292e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Param6 parameter6, Param7 parameter7)
2938f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    {
294e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        return new CrossThreadTask(method, parameter1, parameter2, parameter3, parameter4, parameter5, parameter6, parameter7);
2958f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    }
2968f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
2976c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
298e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    CrossThreadTask7(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Param6 parameter6, Param7 parameter7)
2996c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        : m_method(method)
3006c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter1(parameter1)
3016c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter2(parameter2)
3026c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter3(parameter3)
3036c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter4(parameter4)
3046c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter5(parameter5)
3056c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter6(parameter6)
3066c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_parameter7(parameter7)
3078f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    {
3088f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    }
3098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
3106c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    virtual void performTask(ScriptExecutionContext* context)
3118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    {
3126c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        (*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_parameter4, m_parameter5, m_parameter6, m_parameter7);
3138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    }
3148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
3156c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
3166c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    Method m_method;
3176c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P1 m_parameter1;
3186c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P2 m_parameter2;
3196c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P3 m_parameter3;
3206c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P4 m_parameter4;
3216c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P5 m_parameter5;
3226c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P6 m_parameter6;
3236c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P7 m_parameter7;
3246c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen};
3256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
3266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6, typename P7, typename MP7, typename P8, typename MP8>
327e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockclass CrossThreadTask8 : public ScriptExecutionContext::Task {
3286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenpublic:
3296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    typedef void (*Method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6, MP7, MP8);
330e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef CrossThreadTask8<P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5, P6, MP6, P7, MP7, P8, MP8> CrossThreadTask;
331e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
332e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
333e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
334e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P4>::ParamType Param4;
335e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P5>::ParamType Param5;
336e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P6>::ParamType Param6;
337e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P7>::ParamType Param7;
338e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    typedef typename CrossThreadTaskTraits<P8>::ParamType Param8;
3396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
340e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Param6 parameter6, Param7 parameter7, Param8 parameter8)
3410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    {
342e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block        return new CrossThreadTask(method, parameter1, parameter2, parameter3, parameter4, parameter5, parameter6, parameter7, parameter8);
3436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
3446c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
3456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
346e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    CrossThreadTask8(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Param6 parameter6, Param7 parameter7, Param8 parameter8)
3476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    : m_method(method)
3486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    , m_parameter1(parameter1)
3496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    , m_parameter2(parameter2)
3506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    , m_parameter3(parameter3)
3516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    , m_parameter4(parameter4)
3526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    , m_parameter5(parameter5)
3536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    , m_parameter6(parameter6)
3546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    , m_parameter7(parameter7)
3556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    , m_parameter8(parameter8)
3566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
3576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
3586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
3596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    virtual void performTask(ScriptExecutionContext* context)
3606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
3616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        (*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_parameter4, m_parameter5, m_parameter6, m_parameter7, m_parameter8);
3620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
3636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
3646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
3656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    Method m_method;
3666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P1 m_parameter1;
3676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P2 m_parameter2;
3686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P3 m_parameter3;
3696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P4 m_parameter4;
3706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P5 m_parameter5;
3716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P6 m_parameter6;
3726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P7 m_parameter7;
3736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    P8 m_parameter8;
3746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen};
3756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
3766c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1>
3776c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenPassOwnPtr<ScriptExecutionContext::Task> createCallbackTask(
3786c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    void (*method)(ScriptExecutionContext*, MP1),
3796c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    const P1& parameter1)
3806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
381e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    return CrossThreadTask1<typename CrossThreadCopier<P1>::Type, MP1>::create(
3826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        method,
3836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        CrossThreadCopier<P1>::copy(parameter1));
3846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
3856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
3866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1, typename P2, typename MP2>
3876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenPassOwnPtr<ScriptExecutionContext::Task> createCallbackTask(
3886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    void (*method)(ScriptExecutionContext*, MP1, MP2),
3896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    const P1& parameter1, const P2& parameter2)
3906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
391e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    return CrossThreadTask2<typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2>::create(
3926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        method,
3936c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        CrossThreadCopier<P1>::copy(parameter1), CrossThreadCopier<P2>::copy(parameter2));
3946c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
3956c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
3966c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3>
3976c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenPassOwnPtr<ScriptExecutionContext::Task> createCallbackTask(
3986c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    void (*method)(ScriptExecutionContext*, MP1, MP2, MP3),
3996c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    const P1& parameter1, const P2& parameter2, const P3& parameter3)
4006c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
401e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    return CrossThreadTask3<typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3>::create(
4026c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        method,
4036c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        CrossThreadCopier<P1>::copy(parameter1), CrossThreadCopier<P2>::copy(parameter2),
4046c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        CrossThreadCopier<P3>::copy(parameter3));
4056c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
4066c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
4076c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4>
4086c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenPassOwnPtr<ScriptExecutionContext::Task> createCallbackTask(
4096c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    void (*method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4),
4106c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    const P1& parameter1, const P2& parameter2, const P3& parameter3, const P4& parameter4)
4116c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
412e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    return CrossThreadTask4<typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3,
4136c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        typename CrossThreadCopier<P4>::Type, MP4>::create(
4146c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            method,
4156c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            CrossThreadCopier<P1>::copy(parameter1), CrossThreadCopier<P2>::copy(parameter2),
4166c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            CrossThreadCopier<P3>::copy(parameter3), CrossThreadCopier<P4>::copy(parameter4));
4176c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
4186c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
4196c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5>
4206c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenPassOwnPtr<ScriptExecutionContext::Task> createCallbackTask(
4216c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    void (*method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5),
4226c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    const P1& parameter1, const P2& parameter2, const P3& parameter3, const P4& parameter4, const P5& parameter5)
4236c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
424e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    return CrossThreadTask5<typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3,
4256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        typename CrossThreadCopier<P4>::Type, MP4, typename CrossThreadCopier<P5>::Type, MP5>::create(
4266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            method,
4276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            CrossThreadCopier<P1>::copy(parameter1), CrossThreadCopier<P2>::copy(parameter2),
4286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            CrossThreadCopier<P3>::copy(parameter3), CrossThreadCopier<P4>::copy(parameter4),
4296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            CrossThreadCopier<P5>::copy(parameter5));
4306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
4316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
4326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6>
4336c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenPassOwnPtr<ScriptExecutionContext::Task> createCallbackTask(
4346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    void (*method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6),
4356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    const P1& parameter1, const P2& parameter2, const P3& parameter3, const P4& parameter4, const P5& parameter5, const P6& parameter6)
4366c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
437e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    return CrossThreadTask6<typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3,
4386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        typename CrossThreadCopier<P4>::Type, MP4, typename CrossThreadCopier<P5>::Type, MP5, typename CrossThreadCopier<P6>::Type, MP6>::create(
4396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            method,
4406c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            CrossThreadCopier<P1>::copy(parameter1), CrossThreadCopier<P2>::copy(parameter2),
4416c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            CrossThreadCopier<P3>::copy(parameter3), CrossThreadCopier<P4>::copy(parameter4),
4426c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            CrossThreadCopier<P5>::copy(parameter5), CrossThreadCopier<P6>::copy(parameter6));
4436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
4446c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
4456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6, typename P7, typename MP7>
4466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenPassOwnPtr<ScriptExecutionContext::Task> createCallbackTask(
4476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    void (*method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6, MP7),
4486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    const P1& parameter1, const P2& parameter2, const P3& parameter3, const P4& parameter4, const P5& parameter5, const P6& parameter6, const P7& parameter7)
4496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
450e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    return CrossThreadTask7<typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3,
4516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        typename CrossThreadCopier<P4>::Type, MP4, typename CrossThreadCopier<P5>::Type, MP5, typename CrossThreadCopier<P6>::Type, MP6,
4526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        typename CrossThreadCopier<P7>::Type, MP7>::create(
4536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            method,
4546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            CrossThreadCopier<P1>::copy(parameter1), CrossThreadCopier<P2>::copy(parameter2),
4556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            CrossThreadCopier<P3>::copy(parameter3), CrossThreadCopier<P4>::copy(parameter4),
4566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            CrossThreadCopier<P5>::copy(parameter5), CrossThreadCopier<P6>::copy(parameter6),
4576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen            CrossThreadCopier<P7>::copy(parameter7));
4586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
4596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
4606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsentemplate<typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6, typename P7, typename MP7, typename P8, typename MP8>
4616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian MonsenPassOwnPtr<ScriptExecutionContext::Task> createCallbackTask(
4626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                                                            void (*method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6, MP7, MP8),
4636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                                                            const P1& parameter1, const P2& parameter2, const P3& parameter3, const P4& parameter4, const P5& parameter5, const P6& parameter6, const P7& parameter7, const P8& parameter8)
4646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{
465e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block    return CrossThreadTask8<typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3,
4666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    typename CrossThreadCopier<P4>::Type, MP4, typename CrossThreadCopier<P5>::Type, MP5, typename CrossThreadCopier<P6>::Type, MP6,
4676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    typename CrossThreadCopier<P7>::Type, MP7, typename CrossThreadCopier<P8>::Type, MP8>::create(
4686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                                                       method,
4696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                                                       CrossThreadCopier<P1>::copy(parameter1), CrossThreadCopier<P2>::copy(parameter2),
4706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                                                       CrossThreadCopier<P3>::copy(parameter3), CrossThreadCopier<P4>::copy(parameter4),
4716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                                                       CrossThreadCopier<P5>::copy(parameter5), CrossThreadCopier<P6>::copy(parameter6),
4726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen                                                       CrossThreadCopier<P7>::copy(parameter7), CrossThreadCopier<P8>::copy(parameter8));
4736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}
4740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} // namespace WebCore
4768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
477e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#endif // CrossThreadTask_h
478