| Index: content/browser/renderer_host/text_input_manager.cc | 
| diff --git a/content/browser/renderer_host/text_input_manager.cc b/content/browser/renderer_host/text_input_manager.cc | 
| index aa2522f91ca74f1272bd1cbd63eff233b51f6607..7c46df06f69587fbac6b444a401b51cde1e11bb5 100644 | 
| --- a/content/browser/renderer_host/text_input_manager.cc | 
| +++ b/content/browser/renderer_host/text_input_manager.cc | 
| @@ -316,4 +316,28 @@ TextInputManager::TextSelection::TextSelection(const TextSelection& other) = | 
|  | 
| TextInputManager::TextSelection::~TextSelection() {} | 
|  | 
| +bool TextInputManager::TextSelection::GetSelectedText( | 
| +    base::string16* selected_text) const { | 
| +  if (text.empty() || range.is_empty()) | 
| +    return false; | 
| + | 
| +  size_t pos = range.GetMin() - offset; | 
| +  size_t n = range.length(); | 
| +  if (pos + n > text.length()) { | 
| +    LOG(WARNING) << "The text can not fully cover range (selection's end point " | 
| +                    "exceeds text length)."; | 
| +    return false; | 
| +  } | 
| + | 
| +  if (pos >= text.length()) { | 
| +    LOG(WARNING) << "The text ca not cover range (selection range's starting " | 
| +                    "point exceeds text length)."; | 
| +    return false; | 
| +  } | 
| + | 
| +  selected_text->clear(); | 
| +  selected_text->append(text.substr(pos, n)); | 
| +  return true; | 
| +} | 
| + | 
| }  // namespace content | 
|  |