| Index: chrome/browser/ui/webui/chromeos/login/base_screen_handler_utils.h
|
| diff --git a/chrome/browser/ui/webui/chromeos/login/base_screen_handler_utils.h b/chrome/browser/ui/webui/chromeos/login/base_screen_handler_utils.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..242106589578ae391f97acbaf1f611ebacf7da05
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/webui/chromeos/login/base_screen_handler_utils.h
|
| @@ -0,0 +1,138 @@
|
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_BASE_SCREEN_HANDLER_UTILS_H_
|
| +#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_BASE_SCREEN_HANDLER_UTILS_H_
|
| +
|
| +#include <cstddef>
|
| +#include <string>
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/logging.h"
|
| +#include "base/string16.h"
|
| +#include "base/values.h"
|
| +
|
| +namespace chromeos {
|
| +
|
| +template<typename T>
|
| +struct UnwrapConstRef {
|
| + typedef T Type;
|
| +};
|
| +
|
| +template<typename T>
|
| +struct UnwrapConstRef<const T&> {
|
| + typedef T Type;
|
| +};
|
| +
|
| +template<typename T>
|
| +inline bool GetArg(const base::ListValue* args, size_t index, T* out_value);
|
| +
|
| +template<>
|
| +inline bool GetArg<bool>(const base::ListValue* args,
|
| + size_t index,
|
| + bool* out_value) {
|
| + return args->GetBoolean(index, out_value);
|
| +}
|
| +
|
| +template<>
|
| +inline bool GetArg<int>(const base::ListValue* args,
|
| + size_t index,
|
| + int* out_value) {
|
| + return args->GetInteger(index, out_value);
|
| +}
|
| +
|
| +template<>
|
| +inline bool GetArg<double>(const base::ListValue* args,
|
| + size_t index,
|
| + double* out_value) {
|
| + return args->GetDouble(index, out_value);
|
| +}
|
| +
|
| +template<>
|
| +inline bool GetArg<std::string>(const base::ListValue* args,
|
| + size_t index,
|
| + std::string* out_value) {
|
| + return args->GetString(index, out_value);
|
| +}
|
| +
|
| +template<>
|
| +inline bool GetArg<string16>(const base::ListValue* args,
|
| + size_t index,
|
| + string16* out_value) {
|
| + return args->GetString(index, out_value);
|
| +}
|
| +
|
| +inline void CallbackWrapper0(base::Callback<void()> callback,
|
| + const base::ListValue* args) {
|
| + DCHECK(args);
|
| + DCHECK(args->empty());
|
| + callback.Run();
|
| +}
|
| +
|
| +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 A1, typename A2>
|
| +void CallbackWrapper2(base::Callback<void(A1, A2)> callback,
|
| + const base::ListValue* args) {
|
| + 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);
|
| +}
|
| +
|
| +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);
|
| +}
|
| +
|
| +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);
|
| +}
|
| +
|
| +} // namespace chromeos
|
| +
|
| +#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_BASE_SCREEN_HANDLER_UTILS_H_
|
|
|