| Index: components/login/base_screen_handler_utils.h
|
| diff --git a/components/login/base_screen_handler_utils.h b/components/login/base_screen_handler_utils.h
|
| index c2b89719d6ddc50e792c5107edeb698a0e70b4c0..55497a0d74dce195fc2aef46e98862ef115c56a8 100644
|
| --- a/components/login/base_screen_handler_utils.h
|
| +++ b/components/login/base_screen_handler_utils.h
|
| @@ -11,6 +11,7 @@
|
| #include "base/callback.h"
|
| #include "base/logging.h"
|
| #include "base/strings/string16.h"
|
| +#include "base/tuple.h"
|
| #include "base/values.h"
|
| #include "components/login/login_export.h"
|
|
|
| @@ -59,87 +60,29 @@ inline const T& MakeValue(const T& v) {
|
| return v;
|
| }
|
|
|
| -void LOGIN_EXPORT CallbackWrapper0(base::Callback<void()> callback,
|
| - const base::ListValue* args);
|
| -
|
| -template <typename A1>
|
| -void CallbackWrapper1(base::Callback<void(A1)> callback,
|
| - const base::ListValue* args) {
|
| - DCHECK(args);
|
| - DCHECK_EQ(1u, args->GetSize());
|
| - typename UnwrapConstRef<A1>::Type arg1;
|
| - if (!GetArg(args, 0, &arg1)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - callback.Run(arg1);
|
| +template <typename Arg, size_t index>
|
| +typename UnwrapConstRef<Arg>::Type ParseArg(const base::ListValue* args) {
|
| + typename UnwrapConstRef<Arg>::Type parsed;
|
| + CHECK(GetArg(args, index, &parsed));
|
| + return parsed;
|
| }
|
|
|
| -template <typename A1, typename A2>
|
| -void CallbackWrapper2(base::Callback<void(A1, A2)> callback,
|
| - const base::ListValue* args) {
|
| +template <typename... Args, size_t... Ns>
|
| +inline void DispatchToCallback(const base::Callback<void(Args...)>& callback,
|
| + const base::ListValue* args,
|
| + IndexSequence<Ns...> indexes) {
|
| DCHECK(args);
|
| - DCHECK_EQ(2u, args->GetSize());
|
| - typename UnwrapConstRef<A1>::Type arg1;
|
| - typename UnwrapConstRef<A2>::Type arg2;
|
| - if (!GetArg(args, 0, &arg1) || !GetArg(args, 1, &arg2)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - callback.Run(arg1, arg2);
|
| -}
|
| + DCHECK_EQ(sizeof...(Args), args->GetSize());
|
|
|
| -template <typename A1, typename A2, typename A3>
|
| -void CallbackWrapper3(base::Callback<void(A1, A2, A3)> callback,
|
| - const base::ListValue* args) {
|
| - DCHECK(args);
|
| - DCHECK_EQ(3u, args->GetSize());
|
| - typename UnwrapConstRef<A1>::Type arg1;
|
| - typename UnwrapConstRef<A2>::Type arg2;
|
| - typename UnwrapConstRef<A3>::Type arg3;
|
| - if (!GetArg(args, 0, &arg1) || !GetArg(args, 1, &arg2) ||
|
| - !GetArg(args, 2, &arg3)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - callback.Run(arg1, arg2, arg3);
|
| + callback.Run(ParseArg<Args, Ns>(args)...);
|
| }
|
|
|
| -template <typename A1, typename A2, typename A3, typename A4>
|
| -void CallbackWrapper4(base::Callback<void(A1, A2, A3, A4)> callback,
|
| - const base::ListValue* args) {
|
| - DCHECK(args);
|
| - DCHECK_EQ(4u, args->GetSize());
|
| - typename UnwrapConstRef<A1>::Type arg1;
|
| - typename UnwrapConstRef<A2>::Type arg2;
|
| - typename UnwrapConstRef<A3>::Type arg3;
|
| - typename UnwrapConstRef<A4>::Type arg4;
|
| - if (!GetArg(args, 0, &arg1) || !GetArg(args, 1, &arg2) ||
|
| - !GetArg(args, 2, &arg3) || !GetArg(args, 3, &arg4)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - callback.Run(arg1, arg2, arg3, arg4);
|
| +template <typename... Args>
|
| +void CallbackWrapper(const base::Callback<void(Args...)>& callback,
|
| + const base::ListValue* args) {
|
| + DispatchToCallback(callback, args, MakeIndexSequence<sizeof...(Args)>());
|
| }
|
|
|
| -template <typename A1, typename A2, typename A3, typename A4, typename A5>
|
| -void CallbackWrapper5(base::Callback<void(A1, A2, A3, A4, A5)> callback,
|
| - const base::ListValue* args) {
|
| - DCHECK(args);
|
| - DCHECK_EQ(5u, args->GetSize());
|
| - typename UnwrapConstRef<A1>::Type arg1;
|
| - typename UnwrapConstRef<A2>::Type arg2;
|
| - typename UnwrapConstRef<A3>::Type arg3;
|
| - typename UnwrapConstRef<A4>::Type arg4;
|
| - typename UnwrapConstRef<A5>::Type arg5;
|
| - if (!GetArg(args, 0, &arg1) || !GetArg(args, 1, &arg2) ||
|
| - !GetArg(args, 2, &arg3) || !GetArg(args, 3, &arg4) ||
|
| - !GetArg(args, 4, &arg5)) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| - callback.Run(arg1, arg2, arg3, arg4, arg5);
|
| -}
|
|
|
| } // namespace login
|
|
|
|
|