Index: ui/views/controls/textfield/textfield_model.cc |
diff --git a/ui/views/controls/textfield/textfield_model.cc b/ui/views/controls/textfield/textfield_model.cc |
index 5738887b7256d5c84e2aa333472fae50bc42ec25..16f3939a16eb803a8b2b0c59fb89289cc532e4ca 100644 |
--- a/ui/views/controls/textfield/textfield_model.cc |
+++ b/ui/views/controls/textfield/textfield_model.cc |
@@ -8,6 +8,7 @@ |
#include "base/logging.h" |
#include "base/macros.h" |
+#include "base/memory/ptr_util.h" |
#include "base/message_loop/message_loop.h" |
#include "base/stl_util.h" |
#include "base/strings/string_util.h" |
@@ -672,8 +673,8 @@ void TextfieldModel::ConfirmCompositionText() { |
composition_range_.start(), composition_range_.length()); |
// TODO(oshima): current behavior on ChromeOS is a bit weird and not |
// sure exactly how this should work. Find out and fix if necessary. |
- AddOrMergeEditHistory( |
- new InsertEdit(false, composition, composition_range_.start())); |
+ AddOrMergeEditHistory(base::MakeUnique<InsertEdit>( |
+ false, composition, composition_range_.start())); |
render_text_->SetCursorPosition(composition_range_.end()); |
ClearComposition(); |
if (delegate_) |
@@ -705,7 +706,7 @@ bool TextfieldModel::HasCompositionText() const { |
} |
void TextfieldModel::ClearEditHistory() { |
- base::STLDeleteElements(&edit_history_); |
+ edit_history_.clear(); |
current_edit_ = edit_history_.end(); |
} |
@@ -754,7 +755,6 @@ void TextfieldModel::ClearRedoHistory() { |
} |
EditHistory::iterator delete_start = current_edit_; |
++delete_start; |
- base::STLDeleteContainerPointers(delete_start, edit_history_.end()); |
edit_history_.erase(delete_start, edit_history_.end()); |
} |
@@ -762,11 +762,12 @@ void TextfieldModel::ExecuteAndRecordDelete(gfx::Range range, bool mergeable) { |
size_t old_text_start = range.GetMin(); |
const base::string16 old_text = text().substr(old_text_start, range.length()); |
bool backward = range.is_reversed(); |
- Edit* edit = new DeleteEdit(mergeable, old_text, old_text_start, backward); |
- bool delete_edit = AddOrMergeEditHistory(edit); |
+ std::unique_ptr<Edit> edit_ptr = base::MakeUnique<DeleteEdit>( |
+ mergeable, old_text, old_text_start, backward); |
+ Edit* edit = edit_ptr.get(); |
+ std::unique_ptr<Edit> returned_edit = |
+ AddOrMergeEditHistory(std::move(edit_ptr)); |
edit->Redo(this); |
Nico
2016/09/08 17:32:00
Getting a raw ptr to a unique_ptr that's moved fro
Avi (use Gerrit)
2016/09/13 14:36:13
This entire code is insane re ownership. I would d
|
- if (delete_edit) |
- delete edit; |
} |
void TextfieldModel::ExecuteAndRecordReplaceSelection( |
@@ -788,38 +789,36 @@ void TextfieldModel::ExecuteAndRecordReplace(MergeType merge_type, |
size_t new_text_start) { |
size_t old_text_start = render_text_->selection().GetMin(); |
bool backward = render_text_->selection().is_reversed(); |
- Edit* edit = new ReplaceEdit(merge_type, |
- GetSelectedText(), |
- old_cursor_pos, |
- old_text_start, |
- backward, |
- new_cursor_pos, |
- new_text, |
- new_text_start); |
- bool delete_edit = AddOrMergeEditHistory(edit); |
+ std::unique_ptr<Edit> edit_ptr = base::MakeUnique<ReplaceEdit>( |
+ merge_type, GetSelectedText(), old_cursor_pos, old_text_start, backward, |
+ new_cursor_pos, new_text, new_text_start); |
+ Edit* edit = edit_ptr.get(); |
+ std::unique_ptr<Edit> returned_edit = |
+ AddOrMergeEditHistory(std::move(edit_ptr)); |
edit->Redo(this); |
Nico
2016/09/08 17:32:00
ditto
|
- if (delete_edit) |
- delete edit; |
} |
void TextfieldModel::ExecuteAndRecordInsert(const base::string16& new_text, |
bool mergeable) { |
- Edit* edit = new InsertEdit(mergeable, new_text, GetCursorPosition()); |
- bool delete_edit = AddOrMergeEditHistory(edit); |
+ std::unique_ptr<Edit> edit_ptr = |
+ base::MakeUnique<InsertEdit>(mergeable, new_text, GetCursorPosition()); |
+ Edit* edit = edit_ptr.get(); |
+ std::unique_ptr<Edit> returned_edit = |
+ AddOrMergeEditHistory(std::move(edit_ptr)); |
edit->Redo(this); |
- if (delete_edit) |
- delete edit; |
} |
-bool TextfieldModel::AddOrMergeEditHistory(Edit* edit) { |
+std::unique_ptr<internal::Edit> TextfieldModel::AddOrMergeEditHistory( |
+ std::unique_ptr<Edit> edit) { |
ClearRedoHistory(); |
- if (current_edit_ != edit_history_.end() && (*current_edit_)->Merge(edit)) { |
+ if (current_edit_ != edit_history_.end() && |
+ (*current_edit_)->Merge(edit.get())) { |
// If a current edit exists and has been merged with a new edit, don't add |
- // to the history, and return true to delete |edit| after redo. |
- return true; |
+ // to the history, and return the edit so that it is deleted after redo. |
+ return edit; |
} |
- edit_history_.push_back(edit); |
+ edit_history_.push_back(std::move(edit)); |
if (current_edit_ == edit_history_.end()) { |
// If there is no redoable edit, this is the 1st edit because RedoHistory |
// has been already deleted. |
@@ -828,7 +827,7 @@ bool TextfieldModel::AddOrMergeEditHistory(Edit* edit) { |
} else { |
++current_edit_; |
} |
- return false; |
+ return nullptr; |
} |
void TextfieldModel::ModifyText(size_t delete_from, |