15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file was GENERATED by command: 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// pump.py bind_to_current_loop.h.pump 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DO NOT EDIT BY HAND!!! 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef MEDIA_BASE_BIND_TO_CURRENT_LOOP_H_ 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define MEDIA_BASE_BIND_TO_CURRENT_LOOP_H_ 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/location.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/single_thread_task_runner.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// This is a helper utility for base::Bind()ing callbacks to the current 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// MessageLoop. The typical use is when |a| (of class |A|) wants to hand a 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// callback such as base::Bind(&A::AMethod, a) to |b|, but needs to ensure that 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// when |b| executes the callback, it does so on |a|'s current MessageLoop. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Typical usage: request to be called back on the current thread: 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// other->StartAsyncProcessAndCallMeBack( 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// media::BindToCurrentLoop(base::Bind(&MyClass::MyMethod, this))); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Note that like base::Bind(), BindToCurrentLoop() can't bind non-constant 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// references, and that *unlike* base::Bind(), BindToCurrentLoop() makes copies 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// of its arguments, and thus can't be used with arrays. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Mimic base::internal::CallbackForward, replacing p.Pass() with 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// base::Passed(&p) to account for the extra layer of indirection. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename T> 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)T& TrampolineForward(T& t) { return t; } 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename T, typename R> 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)base::internal::PassedWrapper<scoped_ptr<T, R> > TrampolineForward( 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<T, R>& p) { return base::Passed(&p); } 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename T> 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::internal::PassedWrapper<ScopedVector<T> > TrampolineForward( 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedVector<T>& p) { return base::Passed(&p); } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename T> struct TrampolineHelper; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct TrampolineHelper<void()> { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void Run( 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void()>& cb) { 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) task_runner->PostTask(FROM_HERE, base::Bind(cb)); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename A1> 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct TrampolineHelper<void(A1)> { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void Run( 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(A1)>& cb, A1 a1) { 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) task_runner->PostTask(FROM_HERE, base::Bind(cb, 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a1))); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename A1, typename A2> 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct TrampolineHelper<void(A1, A2)> { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void Run( 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(A1, A2)>& cb, A1 a1, A2 a2) { 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) task_runner->PostTask(FROM_HERE, base::Bind(cb, 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a1), internal::TrampolineForward(a2))); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename A1, typename A2, typename A3> 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct TrampolineHelper<void(A1, A2, A3)> { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void Run( 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(A1, A2, A3)>& cb, A1 a1, A2 a2, A3 a3) { 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) task_runner->PostTask(FROM_HERE, base::Bind(cb, 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a1), internal::TrampolineForward(a2), 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a3))); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename A1, typename A2, typename A3, typename A4> 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct TrampolineHelper<void(A1, A2, A3, A4)> { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void Run( 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(A1, A2, A3, A4)>& cb, A1 a1, A2 a2, A3 a3, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A4 a4) { 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) task_runner->PostTask(FROM_HERE, base::Bind(cb, 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a1), internal::TrampolineForward(a2), 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a3), internal::TrampolineForward(a4))); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename A1, typename A2, typename A3, typename A4, typename A5> 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct TrampolineHelper<void(A1, A2, A3, A4, A5)> { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void Run( 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(A1, A2, A3, A4, A5)>& cb, A1 a1, A2 a2, A3 a3, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A4 a4, A5 a5) { 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) task_runner->PostTask(FROM_HERE, base::Bind(cb, 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a1), internal::TrampolineForward(a2), 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a3), internal::TrampolineForward(a4), 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a5))); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename A1, typename A2, typename A3, typename A4, typename A5, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typename A6> 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct TrampolineHelper<void(A1, A2, A3, A4, A5, A6)> { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void Run( 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(A1, A2, A3, A4, A5, A6)>& cb, A1 a1, A2 a2, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A3 a3, A4 a4, A5 a5, A6 a6) { 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) task_runner->PostTask(FROM_HERE, base::Bind(cb, 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a1), internal::TrampolineForward(a2), 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a3), internal::TrampolineForward(a4), 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a5), internal::TrampolineForward(a6))); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename A1, typename A2, typename A3, typename A4, typename A5, 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typename A6, typename A7> 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct TrampolineHelper<void(A1, A2, A3, A4, A5, A6, A7)> { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void Run( 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Callback<void(A1, A2, A3, A4, A5, A6, A7)>& cb, A1 a1, A2 a2, 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) task_runner->PostTask(FROM_HERE, base::Bind(cb, 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a1), internal::TrampolineForward(a2), 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a3), internal::TrampolineForward(a4), 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a5), internal::TrampolineForward(a6), 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) internal::TrampolineForward(a7))); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace internal 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T> 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static base::Callback<T> BindToCurrentLoop( 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Callback<T>& cb) { 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return base::Bind(&internal::TrampolineHelper<T>::Run, 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoopProxy::current(), cb); 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace media 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // MEDIA_BASE_BIND_TO_CURRENT_LOOP_H_ 163