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