Commit c93ad77e authored by uekawa@chromium.org's avatar uekawa@chromium.org

Use base::string16 for CompositionText.Text instead of converting to utf-8 and back unnecessarily.

BUG=None

Review URL: https://codereview.chromium.org/163023002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@251322 0039d316-1c4b-4281-b951-d872f2087c98
parent db898498
...@@ -142,7 +142,7 @@ bool InputMethodEngine::SetComposition( ...@@ -142,7 +142,7 @@ bool InputMethodEngine::SetComposition(
composition_cursor_ = cursor; composition_cursor_ = cursor;
composition_text_.reset(new CompositionText()); composition_text_.reset(new CompositionText());
composition_text_->set_text(text); composition_text_->set_text(base::UTF8ToUTF16(text));
composition_text_->set_selection_start(selection_start); composition_text_->set_selection_start(selection_start);
composition_text_->set_selection_end(selection_end); composition_text_->set_selection_end(selection_end);
......
...@@ -468,7 +468,7 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineIBusBrowserTest, ...@@ -468,7 +468,7 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineIBusBrowserTest,
const CompositionText& composition_text = const CompositionText& composition_text =
mock_input_context->last_update_composition_arg().composition_text; mock_input_context->last_update_composition_arg().composition_text;
EXPECT_EQ("COMPOSITION_TEXT", composition_text.text()); EXPECT_EQ(base::UTF8ToUTF16("COMPOSITION_TEXT"), composition_text.text());
const std::vector<CompositionText::UnderlineAttribute>& underlines = const std::vector<CompositionText::UnderlineAttribute>& underlines =
composition_text.underline_attributes(); composition_text.underline_attributes();
......
...@@ -7,7 +7,9 @@ ...@@ -7,7 +7,9 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "base/basictypes.h" #include "base/basictypes.h"
#include "base/strings/string16.h"
#include "chromeos/chromeos_export.h" #include "chromeos/chromeos_export.h"
namespace chromeos { namespace chromeos {
...@@ -30,8 +32,8 @@ class CHROMEOS_EXPORT CompositionText { ...@@ -30,8 +32,8 @@ class CHROMEOS_EXPORT CompositionText {
virtual ~CompositionText(); virtual ~CompositionText();
// Accessors // Accessors
const std::string& text() const { return text_; } const base::string16& text() const { return text_; }
void set_text(const std::string& text) { text_ = text; } void set_text(const base::string16& text) { text_ = text; }
const std::vector<UnderlineAttribute>& underline_attributes() const { const std::vector<UnderlineAttribute>& underline_attributes() const {
return underline_attributes_; return underline_attributes_;
...@@ -54,7 +56,7 @@ class CHROMEOS_EXPORT CompositionText { ...@@ -54,7 +56,7 @@ class CHROMEOS_EXPORT CompositionText {
void CopyFrom(const CompositionText& obj); void CopyFrom(const CompositionText& obj);
private: private:
std::string text_; base::string16 text_;
std::vector<UnderlineAttribute> underline_attributes_; std::vector<UnderlineAttribute> underline_attributes_;
uint32 selection_start_; uint32 selection_start_;
uint32 selection_end_; uint32 selection_end_;
......
...@@ -5,12 +5,13 @@ ...@@ -5,12 +5,13 @@
#include "chromeos/ime/composition_text.h" #include "chromeos/ime/composition_text.h"
#include "base/strings/utf_string_conversions.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace chromeos { namespace chromeos {
TEST(CompositionTextTest, CopyTest) { TEST(CompositionTextTest, CopyTest) {
const char kSampleText[] = "Sample Text"; const base::string16 kSampleText = base::UTF8ToUTF16("Sample Text");
const CompositionText::UnderlineAttribute kSampleUnderlineAttribute1 = { const CompositionText::UnderlineAttribute kSampleUnderlineAttribute1 = {
CompositionText::COMPOSITION_TEXT_UNDERLINE_SINGLE, 10, 20}; CompositionText::COMPOSITION_TEXT_UNDERLINE_SINGLE, 10, 20};
......
...@@ -496,8 +496,7 @@ void InputMethodChromeOS::UpdateCompositionText( ...@@ -496,8 +496,7 @@ void InputMethodChromeOS::UpdateCompositionText(
chromeos::IBusPanelCandidateWindowHandlerInterface* candidate_window = chromeos::IBusPanelCandidateWindowHandlerInterface* candidate_window =
chromeos::IMEBridge::Get()->GetCandidateWindowHandler(); chromeos::IMEBridge::Get()->GetCandidateWindowHandler();
if (candidate_window) if (candidate_window)
candidate_window->UpdatePreeditText( candidate_window->UpdatePreeditText(text.text(), cursor_pos, visible);
base::UTF8ToUTF16(text.text()), cursor_pos, visible);
} }
// |visible| argument is very confusing. For example, what's the correct // |visible| argument is very confusing. For example, what's the correct
...@@ -560,8 +559,7 @@ bool InputMethodChromeOS::ExecuteCharacterComposer(const ui::KeyEvent& event) { ...@@ -560,8 +559,7 @@ bool InputMethodChromeOS::ExecuteCharacterComposer(const ui::KeyEvent& event) {
// CharacterComposer consumed the key event. Update the composition text. // CharacterComposer consumed the key event. Update the composition text.
chromeos::CompositionText preedit; chromeos::CompositionText preedit;
preedit.set_text( preedit.set_text(character_composer_.preedit_string());
base::UTF16ToUTF8(character_composer_.preedit_string()));
UpdateCompositionText(preedit, preedit.text().size(), UpdateCompositionText(preedit, preedit.text().size(),
!preedit.text().empty()); !preedit.text().empty());
std::string commit_text = std::string commit_text =
...@@ -577,7 +575,7 @@ void InputMethodChromeOS::ExtractCompositionText( ...@@ -577,7 +575,7 @@ void InputMethodChromeOS::ExtractCompositionText(
uint32 cursor_position, uint32 cursor_position,
CompositionText* out_composition) const { CompositionText* out_composition) const {
out_composition->Clear(); out_composition->Clear();
out_composition->text = base::UTF8ToUTF16(text.text()); out_composition->text = text.text();
if (out_composition->text.empty()) if (out_composition->text.empty())
return; return;
......
...@@ -35,8 +35,8 @@ namespace { ...@@ -35,8 +35,8 @@ namespace {
typedef chromeos::IMEEngineHandlerInterface::KeyEventDoneCallback typedef chromeos::IMEEngineHandlerInterface::KeyEventDoneCallback
KeyEventCallback; KeyEventCallback;
uint32 GetOffsetInUTF16(const std::string& utf8_string, uint32 utf8_offset) { uint32 GetOffsetInUTF16(
base::string16 utf16_string = UTF8ToUTF16(utf8_string); const base::string16& utf16_string, uint32 utf8_offset) {
DCHECK_LT(utf8_offset, utf16_string.size()); DCHECK_LT(utf8_offset, utf16_string.size());
base::i18n::UTF16CharIterator char_iterator(&utf16_string); base::i18n::UTF16CharIterator char_iterator(&utf16_string);
for (size_t i = 0; i < utf8_offset; ++i) for (size_t i = 0; i < utf8_offset; ++i)
...@@ -575,17 +575,16 @@ TEST_F(InputMethodChromeOSTest, OnCaretBoundsChanged) { ...@@ -575,17 +575,16 @@ TEST_F(InputMethodChromeOSTest, OnCaretBoundsChanged) {
} }
TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_NoAttribute) { TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_NoAttribute) {
const char kSampleText[] = "Sample Text"; const base::string16 kSampleText = base::UTF8ToUTF16("Sample Text");
const uint32 kCursorPos = 2UL; const uint32 kCursorPos = 2UL;
const base::string16 utf16_string = UTF8ToUTF16(kSampleText);
chromeos::CompositionText chromeos_composition_text; chromeos::CompositionText chromeos_composition_text;
chromeos_composition_text.set_text(kSampleText); chromeos_composition_text.set_text(kSampleText);
CompositionText composition_text; CompositionText composition_text;
ime_->ExtractCompositionText( ime_->ExtractCompositionText(
chromeos_composition_text, kCursorPos, &composition_text); chromeos_composition_text, kCursorPos, &composition_text);
EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text); EXPECT_EQ(kSampleText, composition_text.text);
// If there is no selection, |selection| represents cursor position. // If there is no selection, |selection| represents cursor position.
EXPECT_EQ(kCursorPos, composition_text.selection.start()); EXPECT_EQ(kCursorPos, composition_text.selection.start());
EXPECT_EQ(kCursorPos, composition_text.selection.end()); EXPECT_EQ(kCursorPos, composition_text.selection.end());
...@@ -593,13 +592,13 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_NoAttribute) { ...@@ -593,13 +592,13 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_NoAttribute) {
// whole text underline. // whole text underline.
ASSERT_EQ(1UL, composition_text.underlines.size()); ASSERT_EQ(1UL, composition_text.underlines.size());
EXPECT_EQ(0UL, composition_text.underlines[0].start_offset); EXPECT_EQ(0UL, composition_text.underlines[0].start_offset);
EXPECT_EQ(utf16_string.size(), composition_text.underlines[0].end_offset); EXPECT_EQ(kSampleText.size(), composition_text.underlines[0].end_offset);
EXPECT_FALSE(composition_text.underlines[0].thick); EXPECT_FALSE(composition_text.underlines[0].thick);
} }
TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_SingleUnderline) { TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_SingleUnderline) {
const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86" const base::string16 kSampleText = base::UTF8ToUTF16(
"\xE3\x81\x88\xE3\x81\x8A"; "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
const uint32 kCursorPos = 2UL; const uint32 kCursorPos = 2UL;
// Set up chromeos composition text with one underline attribute. // Set up chromeos composition text with one underline attribute.
...@@ -615,7 +614,7 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_SingleUnderline) { ...@@ -615,7 +614,7 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_SingleUnderline) {
CompositionText composition_text; CompositionText composition_text;
ime_->ExtractCompositionText( ime_->ExtractCompositionText(
chromeos_composition_text, kCursorPos, &composition_text); chromeos_composition_text, kCursorPos, &composition_text);
EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text); EXPECT_EQ(kSampleText, composition_text.text);
// If there is no selection, |selection| represents cursor position. // If there is no selection, |selection| represents cursor position.
EXPECT_EQ(kCursorPos, composition_text.selection.start()); EXPECT_EQ(kCursorPos, composition_text.selection.start());
EXPECT_EQ(kCursorPos, composition_text.selection.end()); EXPECT_EQ(kCursorPos, composition_text.selection.end());
...@@ -630,8 +629,8 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_SingleUnderline) { ...@@ -630,8 +629,8 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_SingleUnderline) {
} }
TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_DoubleUnderline) { TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_DoubleUnderline) {
const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86" const base::string16 kSampleText = base::UTF8ToUTF16(
"\xE3\x81\x88\xE3\x81\x8A"; "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
const uint32 kCursorPos = 2UL; const uint32 kCursorPos = 2UL;
// Set up chromeos composition text with one underline attribute. // Set up chromeos composition text with one underline attribute.
...@@ -647,7 +646,7 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_DoubleUnderline) { ...@@ -647,7 +646,7 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_DoubleUnderline) {
CompositionText composition_text; CompositionText composition_text;
ime_->ExtractCompositionText( ime_->ExtractCompositionText(
chromeos_composition_text, kCursorPos, &composition_text); chromeos_composition_text, kCursorPos, &composition_text);
EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text); EXPECT_EQ(kSampleText, composition_text.text);
// If there is no selection, |selection| represents cursor position. // If there is no selection, |selection| represents cursor position.
EXPECT_EQ(kCursorPos, composition_text.selection.start()); EXPECT_EQ(kCursorPos, composition_text.selection.start());
EXPECT_EQ(kCursorPos, composition_text.selection.end()); EXPECT_EQ(kCursorPos, composition_text.selection.end());
...@@ -662,8 +661,8 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_DoubleUnderline) { ...@@ -662,8 +661,8 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_DoubleUnderline) {
} }
TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_ErrorUnderline) { TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_ErrorUnderline) {
const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86" const base::string16 kSampleText = base::UTF8ToUTF16(
"\xE3\x81\x88\xE3\x81\x8A"; "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
const uint32 kCursorPos = 2UL; const uint32 kCursorPos = 2UL;
// Set up chromeos composition text with one underline attribute. // Set up chromeos composition text with one underline attribute.
...@@ -679,7 +678,7 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_ErrorUnderline) { ...@@ -679,7 +678,7 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_ErrorUnderline) {
CompositionText composition_text; CompositionText composition_text;
ime_->ExtractCompositionText( ime_->ExtractCompositionText(
chromeos_composition_text, kCursorPos, &composition_text); chromeos_composition_text, kCursorPos, &composition_text);
EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text); EXPECT_EQ(kSampleText, composition_text.text);
EXPECT_EQ(kCursorPos, composition_text.selection.start()); EXPECT_EQ(kCursorPos, composition_text.selection.start());
EXPECT_EQ(kCursorPos, composition_text.selection.end()); EXPECT_EQ(kCursorPos, composition_text.selection.end());
ASSERT_EQ(1UL, composition_text.underlines.size()); ASSERT_EQ(1UL, composition_text.underlines.size());
...@@ -693,8 +692,8 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_ErrorUnderline) { ...@@ -693,8 +692,8 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_ErrorUnderline) {
} }
TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_Selection) { TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_Selection) {
const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86" const base::string16 kSampleText = base::UTF8ToUTF16(
"\xE3\x81\x88\xE3\x81\x8A"; "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
const uint32 kCursorPos = 2UL; const uint32 kCursorPos = 2UL;
// Set up chromeos composition text with one underline attribute. // Set up chromeos composition text with one underline attribute.
...@@ -706,7 +705,7 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_Selection) { ...@@ -706,7 +705,7 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_Selection) {
CompositionText composition_text; CompositionText composition_text;
ime_->ExtractCompositionText( ime_->ExtractCompositionText(
chromeos_composition_text, kCursorPos, &composition_text); chromeos_composition_text, kCursorPos, &composition_text);
EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text); EXPECT_EQ(kSampleText, composition_text.text);
EXPECT_EQ(kCursorPos, composition_text.selection.start()); EXPECT_EQ(kCursorPos, composition_text.selection.start());
EXPECT_EQ(kCursorPos, composition_text.selection.end()); EXPECT_EQ(kCursorPos, composition_text.selection.end());
ASSERT_EQ(1UL, composition_text.underlines.size()); ASSERT_EQ(1UL, composition_text.underlines.size());
...@@ -722,8 +721,8 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_Selection) { ...@@ -722,8 +721,8 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_Selection) {
TEST_F(InputMethodChromeOSTest, TEST_F(InputMethodChromeOSTest,
ExtractCompositionTextTest_SelectionStartWithCursor) { ExtractCompositionTextTest_SelectionStartWithCursor) {
const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86" const base::string16 kSampleText = base::UTF8ToUTF16(
"\xE3\x81\x88\xE3\x81\x8A"; "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
const uint32 kCursorPos = 1UL; const uint32 kCursorPos = 1UL;
// Set up chromeos composition text with one underline attribute. // Set up chromeos composition text with one underline attribute.
...@@ -735,7 +734,7 @@ TEST_F(InputMethodChromeOSTest, ...@@ -735,7 +734,7 @@ TEST_F(InputMethodChromeOSTest,
CompositionText composition_text; CompositionText composition_text;
ime_->ExtractCompositionText( ime_->ExtractCompositionText(
chromeos_composition_text, kCursorPos, &composition_text); chromeos_composition_text, kCursorPos, &composition_text);
EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text); EXPECT_EQ(kSampleText, composition_text.text);
// If the cursor position is same as selection bounds, selection start // If the cursor position is same as selection bounds, selection start
// position become opposit side of selection from cursor. // position become opposit side of selection from cursor.
EXPECT_EQ(GetOffsetInUTF16(kSampleText, EXPECT_EQ(GetOffsetInUTF16(kSampleText,
...@@ -756,8 +755,8 @@ TEST_F(InputMethodChromeOSTest, ...@@ -756,8 +755,8 @@ TEST_F(InputMethodChromeOSTest,
TEST_F(InputMethodChromeOSTest, TEST_F(InputMethodChromeOSTest,
ExtractCompositionTextTest_SelectionEndWithCursor) { ExtractCompositionTextTest_SelectionEndWithCursor) {
const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86" const base::string16 kSampleText = base::UTF8ToUTF16(
"\xE3\x81\x88\xE3\x81\x8A"; "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
const uint32 kCursorPos = 4UL; const uint32 kCursorPos = 4UL;
// Set up chromeos composition text with one underline attribute. // Set up chromeos composition text with one underline attribute.
...@@ -769,7 +768,7 @@ TEST_F(InputMethodChromeOSTest, ...@@ -769,7 +768,7 @@ TEST_F(InputMethodChromeOSTest,
CompositionText composition_text; CompositionText composition_text;
ime_->ExtractCompositionText( ime_->ExtractCompositionText(
chromeos_composition_text, kCursorPos, &composition_text); chromeos_composition_text, kCursorPos, &composition_text);
EXPECT_EQ(UTF8ToUTF16(kSampleText), composition_text.text); EXPECT_EQ(kSampleText, composition_text.text);
// If the cursor position is same as selection bounds, selection start // If the cursor position is same as selection bounds, selection start
// position become opposit side of selection from cursor. // position become opposit side of selection from cursor.
EXPECT_EQ(GetOffsetInUTF16(kSampleText, EXPECT_EQ(GetOffsetInUTF16(kSampleText,
...@@ -850,7 +849,7 @@ TEST_F(InputMethodChromeOSTest, SurroundingText_PartialText) { ...@@ -850,7 +849,7 @@ TEST_F(InputMethodChromeOSTest, SurroundingText_PartialText) {
ime_->OnTextInputTypeChanged(this); ime_->OnTextInputTypeChanged(this);
// Set the TextInputClient behaviors. // Set the TextInputClient behaviors.
surrounding_text_ = UTF8ToUTF16("abcdefghij"); surrounding_text_ = base::UTF8ToUTF16("abcdefghij");
text_range_ = gfx::Range(5, 10); text_range_ = gfx::Range(5, 10);
selection_range_ = gfx::Range(7, 9); selection_range_ = gfx::Range(7, 9);
...@@ -878,7 +877,7 @@ TEST_F(InputMethodChromeOSTest, SurroundingText_BecomeEmptyText) { ...@@ -878,7 +877,7 @@ TEST_F(InputMethodChromeOSTest, SurroundingText_BecomeEmptyText) {
// Set the TextInputClient behaviors. // Set the TextInputClient behaviors.
// If the surrounding text becomes empty, text_range become (0, 0) and // If the surrounding text becomes empty, text_range become (0, 0) and
// selection range become invalid. // selection range become invalid.
surrounding_text_ = UTF8ToUTF16(""); surrounding_text_ = base::UTF8ToUTF16("");
text_range_ = gfx::Range(0, 0); text_range_ = gfx::Range(0, 0);
selection_range_ = gfx::Range::InvalidRange(); selection_range_ = gfx::Range::InvalidRange();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment