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