1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 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) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/input_method_whitelist.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "base/strings/string_util.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chromeos/ime/extension_ime_util.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/ime/input_method_descriptor.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/ime/input_methods.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace input_method { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)const char kLanguageDelimiter[] = ","; 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InputMethodWhitelist::InputMethodWhitelist() { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(kInputMethods); ++i) { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) supported_input_methods_.insert(kInputMethods[i].input_method_id); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InputMethodWhitelist::~InputMethodWhitelist() { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool InputMethodWhitelist::InputMethodIdIsWhitelisted( 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& input_method_id) const { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return supported_input_methods_.count(input_method_id) > 0; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<InputMethodDescriptors> 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)InputMethodWhitelist::GetSupportedInputMethods() const { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<InputMethodDescriptors> input_methods(new InputMethodDescriptors); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_methods->reserve(arraysize(kInputMethods)); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(kInputMethods); ++i) { 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string> layouts; 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layouts.push_back(kInputMethods[i].xkb_layout_id); 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::vector<std::string> languages; 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Tokenize(kInputMethods[i].language_code, kLanguageDelimiter, &languages); 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DCHECK(!languages.empty()); 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_methods->push_back(InputMethodDescriptor( 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) extension_ime_util::GetInputMethodIDByEngineID( 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) kInputMethods[i].input_method_id), 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "", 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kInputMethods[i].indicator, 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layouts, 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) languages, 52424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) kInputMethods[i].is_login_keyboard, 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL(), // options page url. 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL() // input view page url. 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) )); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return input_methods.Pass(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace input_method 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 62