15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "base/basictypes.h"
6bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "ppapi/c/dev/ppb_text_input_dev.h"
7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ppapi/c/ppb_text_input_controller.h"
8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ppapi/shared_impl/var.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/enter.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/thunk/ppb_instance_api.h"
11a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "ppapi/thunk/thunk.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace thunk {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochCOMPILE_ASSERT(int(PP_TEXTINPUT_TYPE_DEV_NONE) == int(PP_TEXTINPUT_TYPE_NONE),
19bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch               mismatching_enums);
20bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochCOMPILE_ASSERT(int(PP_TEXTINPUT_TYPE_DEV_TEXT) == int(PP_TEXTINPUT_TYPE_TEXT),
21bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch               mismatching_enums);
22bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochCOMPILE_ASSERT(
23bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    int(PP_TEXTINPUT_TYPE_DEV_PASSWORD) == int(PP_TEXTINPUT_TYPE_PASSWORD),
24bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    mismatching_enums);
25bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochCOMPILE_ASSERT(
26bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    int(PP_TEXTINPUT_TYPE_DEV_SEARCH) == int(PP_TEXTINPUT_TYPE_SEARCH),
27bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    mismatching_enums);
28bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochCOMPILE_ASSERT(int(PP_TEXTINPUT_TYPE_DEV_EMAIL) == int(PP_TEXTINPUT_TYPE_EMAIL),
29bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch               mismatching_enums);
30bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochCOMPILE_ASSERT(
31bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    int(PP_TEXTINPUT_TYPE_DEV_NUMBER) == int(PP_TEXTINPUT_TYPE_NUMBER),
32bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    mismatching_enums);
33bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochCOMPILE_ASSERT(
34bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    int(PP_TEXTINPUT_TYPE_DEV_TELEPHONE) == int(PP_TEXTINPUT_TYPE_TELEPHONE),
35bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    mismatching_enums);
36bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochCOMPILE_ASSERT(int(PP_TEXTINPUT_TYPE_DEV_URL) == int(PP_TEXTINPUT_TYPE_URL),
37bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch               mismatching_enums);
38bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetTextInputType(PP_Instance instance, PP_TextInput_Type type) {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInstance enter(instance);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.succeeded())
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    enter.functions()->SetTextInputType(instance, type);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
45bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochvoid SetTextInputType_0_2(PP_Instance instance, PP_TextInput_Type_Dev type) {
46bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  EnterInstance enter(instance);
47bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  if (enter.succeeded())
48bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    enter.functions()->SetTextInputType(instance,
49bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch                                        static_cast<PP_TextInput_Type>(type));
50bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch}
51bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
52a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void UpdateCaretPosition_0_2(PP_Instance instance,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const PP_Rect* caret,
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const PP_Rect* bounding_box) {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInstance enter(instance);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.succeeded() && caret && bounding_box)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    enter.functions()->UpdateCaretPosition(instance, *caret, *bounding_box);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
60a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void UpdateCaretPosition(PP_Instance instance,
61a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                         const PP_Rect* caret) {
62a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EnterInstance enter(instance);
63a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (enter.succeeded() && caret)
64a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    enter.functions()->UpdateCaretPosition(instance, *caret, PP_Rect());
65a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
66a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CancelCompositionText(PP_Instance instance) {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInstance enter(instance);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.succeeded())
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    enter.functions()->CancelCompositionText(instance);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
73a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void UpdateSurroundingText_0_2(PP_Instance instance, const char* text,
74a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                               uint32_t caret, uint32_t anchor) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInstance enter(instance);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.succeeded())
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    enter.functions()->UpdateSurroundingText(instance, text, caret, anchor);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
80a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void UpdateSurroundingText_1_0(PP_Instance instance, PP_Var text,
81a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                               uint32_t caret, uint32_t anchor) {
82a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EnterInstance enter(instance);
83a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  StringVar* var = StringVar::FromPPVar(text);
84a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  if (enter.succeeded() && var)
85a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    enter.functions()->UpdateSurroundingText(instance,
86a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                                             var->value().c_str(),
87a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                                             caret,
88a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                                             anchor);
89a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
90a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SelectionChanged(PP_Instance instance) {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnterInstance enter(instance);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enter.succeeded())
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    enter.functions()->SelectionChanged(instance);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_TextInput_Dev_0_1 g_ppb_textinput_0_1_thunk = {
98bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  &SetTextInputType_0_2,
99a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  &UpdateCaretPosition_0_2,
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &CancelCompositionText,
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
103a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const PPB_TextInput_Dev_0_2 g_ppb_textinput_0_2_thunk = {
104bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  &SetTextInputType_0_2,
105a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  &UpdateCaretPosition_0_2,
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &CancelCompositionText,
107a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  &UpdateSurroundingText_0_2,
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  &SelectionChanged,
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
111a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const PPB_TextInputController_1_0 g_ppb_textinputcontroller_1_0_thunk = {
112a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  &SetTextInputType,
113a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  &UpdateCaretPosition,
114a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  &CancelCompositionText,
115a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  &UpdateSurroundingText_1_0,
116a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)};
117a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_TextInput_Dev_0_1* GetPPB_TextInput_Dev_0_1_Thunk() {
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return &g_ppb_textinput_0_1_thunk;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const PPB_TextInput_Dev_0_2* GetPPB_TextInput_Dev_0_2_Thunk() {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return &g_ppb_textinput_0_2_thunk;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
128a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const PPB_TextInputController_1_0* GetPPB_TextInputController_1_0_Thunk() {
129a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  return &g_ppb_textinputcontroller_1_0_thunk;
130a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
131a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace thunk
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ppapi
134