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(
composition_cursor_ = cursor;
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_end(selection_end);
......
......@@ -468,7 +468,7 @@ IN_PROC_BROWSER_TEST_P(InputMethodEngineIBusBrowserTest,
const CompositionText& 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 =
composition_text.underline_attributes();
......
......@@ -7,7 +7,9 @@
#include <string>
#include <vector>
#include "base/basictypes.h"
#include "base/strings/string16.h"
#include "chromeos/chromeos_export.h"
namespace chromeos {
......@@ -30,8 +32,8 @@ class CHROMEOS_EXPORT CompositionText {
virtual ~CompositionText();
// Accessors
const std::string& text() const { return text_; }
void set_text(const std::string& text) { text_ = text; }
const base::string16& text() const { return text_; }
void set_text(const base::string16& text) { text_ = text; }
const std::vector<UnderlineAttribute>& underline_attributes() const {
return underline_attributes_;
......@@ -54,7 +56,7 @@ class CHROMEOS_EXPORT CompositionText {
void CopyFrom(const CompositionText& obj);
private:
std::string text_;
base::string16 text_;
std::vector<UnderlineAttribute> underline_attributes_;
uint32 selection_start_;
uint32 selection_end_;
......
......@@ -5,12 +5,13 @@
#include "chromeos/ime/composition_text.h"
#include "base/strings/utf_string_conversions.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chromeos {
TEST(CompositionTextTest, CopyTest) {
const char kSampleText[] = "Sample Text";
const base::string16 kSampleText = base::UTF8ToUTF16("Sample Text");
const CompositionText::UnderlineAttribute kSampleUnderlineAttribute1 = {
CompositionText::COMPOSITION_TEXT_UNDERLINE_SINGLE, 10, 20};
......
......@@ -496,8 +496,7 @@ void InputMethodChromeOS::UpdateCompositionText(
chromeos::IBusPanelCandidateWindowHandlerInterface* candidate_window =
chromeos::IMEBridge::Get()->GetCandidateWindowHandler();
if (candidate_window)
candidate_window->UpdatePreeditText(
base::UTF8ToUTF16(text.text()), cursor_pos, visible);
candidate_window->UpdatePreeditText(text.text(), cursor_pos, visible);
}
// |visible| argument is very confusing. For example, what's the correct
......@@ -560,8 +559,7 @@ bool InputMethodChromeOS::ExecuteCharacterComposer(const ui::KeyEvent& event) {
// CharacterComposer consumed the key event. Update the composition text.
chromeos::CompositionText preedit;
preedit.set_text(
base::UTF16ToUTF8(character_composer_.preedit_string()));
preedit.set_text(character_composer_.preedit_string());
UpdateCompositionText(preedit, preedit.text().size(),
!preedit.text().empty());
std::string commit_text =
......@@ -577,7 +575,7 @@ void InputMethodChromeOS::ExtractCompositionText(
uint32 cursor_position,
CompositionText* out_composition) const {
out_composition->Clear();
out_composition->text = base::UTF8ToUTF16(text.text());
out_composition->text = text.text();
if (out_composition->text.empty())
return;
......
......@@ -35,8 +35,8 @@ namespace {
typedef chromeos::IMEEngineHandlerInterface::KeyEventDoneCallback
KeyEventCallback;
uint32 GetOffsetInUTF16(const std::string& utf8_string, uint32 utf8_offset) {
base::string16 utf16_string = UTF8ToUTF16(utf8_string);
uint32 GetOffsetInUTF16(
const base::string16& utf16_string, uint32 utf8_offset) {
DCHECK_LT(utf8_offset, utf16_string.size());
base::i18n::UTF16CharIterator char_iterator(&utf16_string);
for (size_t i = 0; i < utf8_offset; ++i)
......@@ -575,17 +575,16 @@ TEST_F(InputMethodChromeOSTest, OnCaretBoundsChanged) {
}
TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_NoAttribute) {
const char kSampleText[] = "Sample Text";
const base::string16 kSampleText = base::UTF8ToUTF16("Sample Text");
const uint32 kCursorPos = 2UL;
const base::string16 utf16_string = UTF8ToUTF16(kSampleText);
chromeos::CompositionText chromeos_composition_text;
chromeos_composition_text.set_text(kSampleText);
CompositionText composition_text;
ime_->ExtractCompositionText(
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.
EXPECT_EQ(kCursorPos, composition_text.selection.start());
EXPECT_EQ(kCursorPos, composition_text.selection.end());
......@@ -593,13 +592,13 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_NoAttribute) {
// whole text underline.
ASSERT_EQ(1UL, composition_text.underlines.size());
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);
}
TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_SingleUnderline) {
const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86"
"\xE3\x81\x88\xE3\x81\x8A";
const base::string16 kSampleText = base::UTF8ToUTF16(
"\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
const uint32 kCursorPos = 2UL;
// Set up chromeos composition text with one underline attribute.
......@@ -615,7 +614,7 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_SingleUnderline) {
CompositionText composition_text;
ime_->ExtractCompositionText(
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.
EXPECT_EQ(kCursorPos, composition_text.selection.start());
EXPECT_EQ(kCursorPos, composition_text.selection.end());
......@@ -630,8 +629,8 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_SingleUnderline) {
}
TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_DoubleUnderline) {
const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86"
"\xE3\x81\x88\xE3\x81\x8A";
const base::string16 kSampleText = base::UTF8ToUTF16(
"\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
const uint32 kCursorPos = 2UL;
// Set up chromeos composition text with one underline attribute.
......@@ -647,7 +646,7 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_DoubleUnderline) {
CompositionText composition_text;
ime_->ExtractCompositionText(
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.
EXPECT_EQ(kCursorPos, composition_text.selection.start());
EXPECT_EQ(kCursorPos, composition_text.selection.end());
......@@ -662,8 +661,8 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_DoubleUnderline) {
}
TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_ErrorUnderline) {
const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86"
"\xE3\x81\x88\xE3\x81\x8A";
const base::string16 kSampleText = base::UTF8ToUTF16(
"\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
const uint32 kCursorPos = 2UL;
// Set up chromeos composition text with one underline attribute.
......@@ -679,7 +678,7 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_ErrorUnderline) {
CompositionText composition_text;
ime_->ExtractCompositionText(
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.end());
ASSERT_EQ(1UL, composition_text.underlines.size());
......@@ -693,8 +692,8 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_ErrorUnderline) {
}
TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_Selection) {
const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86"
"\xE3\x81\x88\xE3\x81\x8A";
const base::string16 kSampleText = base::UTF8ToUTF16(
"\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
const uint32 kCursorPos = 2UL;
// Set up chromeos composition text with one underline attribute.
......@@ -706,7 +705,7 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_Selection) {
CompositionText composition_text;
ime_->ExtractCompositionText(
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.end());
ASSERT_EQ(1UL, composition_text.underlines.size());
......@@ -722,8 +721,8 @@ TEST_F(InputMethodChromeOSTest, ExtractCompositionTextTest_Selection) {
TEST_F(InputMethodChromeOSTest,
ExtractCompositionTextTest_SelectionStartWithCursor) {
const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86"
"\xE3\x81\x88\xE3\x81\x8A";
const base::string16 kSampleText = base::UTF8ToUTF16(
"\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
const uint32 kCursorPos = 1UL;
// Set up chromeos composition text with one underline attribute.
......@@ -735,7 +734,7 @@ TEST_F(InputMethodChromeOSTest,
CompositionText composition_text;
ime_->ExtractCompositionText(
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
// position become opposit side of selection from cursor.
EXPECT_EQ(GetOffsetInUTF16(kSampleText,
......@@ -756,8 +755,8 @@ TEST_F(InputMethodChromeOSTest,
TEST_F(InputMethodChromeOSTest,
ExtractCompositionTextTest_SelectionEndWithCursor) {
const char kSampleText[] = "\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86"
"\xE3\x81\x88\xE3\x81\x8A";
const base::string16 kSampleText = base::UTF8ToUTF16(
"\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A");
const uint32 kCursorPos = 4UL;
// Set up chromeos composition text with one underline attribute.
......@@ -769,7 +768,7 @@ TEST_F(InputMethodChromeOSTest,
CompositionText composition_text;
ime_->ExtractCompositionText(
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
// position become opposit side of selection from cursor.
EXPECT_EQ(GetOffsetInUTF16(kSampleText,
......@@ -850,7 +849,7 @@ TEST_F(InputMethodChromeOSTest, SurroundingText_PartialText) {
ime_->OnTextInputTypeChanged(this);
// Set the TextInputClient behaviors.
surrounding_text_ = UTF8ToUTF16("abcdefghij");
surrounding_text_ = base::UTF8ToUTF16("abcdefghij");
text_range_ = gfx::Range(5, 10);
selection_range_ = gfx::Range(7, 9);
......@@ -878,7 +877,7 @@ TEST_F(InputMethodChromeOSTest, SurroundingText_BecomeEmptyText) {
// Set the TextInputClient behaviors.
// If the surrounding text becomes empty, text_range become (0, 0) and
// selection range become invalid.
surrounding_text_ = UTF8ToUTF16("");
surrounding_text_ = base::UTF8ToUTF16("");
text_range_ = gfx::Range(0, 0);
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