1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chromeos/ime/extension_ime_util.h"
6
7 #include "base/strings/string_util.h"
8
9 namespace chromeos {
10 namespace {
11 const char kExtensionIMEPrefix[] = "_ext_ime_";
12 const int kExtensionIMEPrefixLength =
13 sizeof(kExtensionIMEPrefix) / sizeof(kExtensionIMEPrefix[0]) - 1;
14 const char kComponentExtensionIMEPrefix[] = "_comp_ime_";
15 const int kComponentExtensionIMEPrefixLength =
16 sizeof(kComponentExtensionIMEPrefix) /
17 sizeof(kComponentExtensionIMEPrefix[0]) - 1;
18 const int kExtensionIdLength = 32;
19 } // namespace
20
21 namespace extension_ime_util {
GetInputMethodID(const std::string & extension_id,const std::string & engine_id)22 std::string GetInputMethodID(const std::string& extension_id,
23 const std::string& engine_id) {
24 DCHECK(!extension_id.empty());
25 DCHECK(!engine_id.empty());
26 return kExtensionIMEPrefix + extension_id + engine_id;
27 }
28
GetComponentInputMethodID(const std::string & extension_id,const std::string & engine_id)29 std::string GetComponentInputMethodID(const std::string& extension_id,
30 const std::string& engine_id) {
31 DCHECK(!extension_id.empty());
32 DCHECK(!engine_id.empty());
33 return kComponentExtensionIMEPrefix + extension_id + engine_id;
34 }
35
GetExtensionIDFromInputMethodID(const std::string & input_method_id)36 std::string GetExtensionIDFromInputMethodID(
37 const std::string& input_method_id) {
38 if (IsExtensionIME(input_method_id) &&
39 input_method_id.size() >= kExtensionIMEPrefixLength +
40 kExtensionIdLength) {
41 return input_method_id.substr(kExtensionIMEPrefixLength,
42 kExtensionIdLength);
43 }
44 if (IsComponentExtensionIME(input_method_id) &&
45 input_method_id.size() >= kComponentExtensionIMEPrefixLength +
46 kExtensionIdLength) {
47 return input_method_id.substr(kComponentExtensionIMEPrefixLength,
48 kExtensionIdLength);
49 }
50 return "";
51 }
52
IsExtensionIME(const std::string & input_method_id)53 bool IsExtensionIME(const std::string& input_method_id) {
54 return StartsWithASCII(input_method_id,
55 kExtensionIMEPrefix,
56 true); // Case sensitive.
57 }
58
IsComponentExtensionIME(const std::string & input_method_id)59 bool IsComponentExtensionIME(const std::string& input_method_id) {
60 return StartsWithASCII(input_method_id,
61 kComponentExtensionIMEPrefix,
62 true); // Case sensitive.
63 }
64
IsMemberOfExtension(const std::string & input_method_id,const std::string & extension_id)65 bool IsMemberOfExtension(const std::string& input_method_id,
66 const std::string& extension_id) {
67 return StartsWithASCII(input_method_id,
68 kExtensionIMEPrefix + extension_id,
69 true); // Case sensitive.
70 }
71
72 } // namespace extension_ime_util
73 } // namespace chromeos
74