| Index: pdf/pdfium/pdfium_engine.cc
|
| diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc
|
| index f71ef7ce71f8b2ccb87dc7e2326c1967ee9fe648..37fef3068bc7739a8b2f9acd46cc8ebc2167adbb 100644
|
| --- a/pdf/pdfium/pdfium_engine.cc
|
| +++ b/pdf/pdfium/pdfium_engine.cc
|
| @@ -1653,8 +1653,10 @@ void PDFiumEngine::SetFormSelectedText(FPDF_FORMHANDLE form_handle,
|
| // selection has changed. If so, set plugin text selection.
|
| std::string selected_form_text = selected_form_text_;
|
| selected_form_text_ = base::UTF16ToUTF8(selected_form_text16);
|
| - if (selected_form_text != selected_form_text_)
|
| + if (selected_form_text != selected_form_text_) {
|
| + DCHECK(in_form_text_area_);
|
| pp::PDF::SetSelectedText(GetPluginInstance(), selected_form_text_.c_str());
|
| + }
|
| }
|
|
|
| void PDFiumEngine::PrintEnd() {
|
| @@ -1725,7 +1727,8 @@ bool PDFiumEngine::OnMouseDown(const pp::MouseInputEvent& event) {
|
|
|
| SetMouseLeftButtonDown(event.GetButton() == PP_INPUTEVENT_MOUSEBUTTON_LEFT);
|
|
|
| - SelectionChangeInvalidator selection_invalidator(this);
|
| + auto selection_invalidator =
|
| + base::MakeUnique<SelectionChangeInvalidator>(this);
|
| selection_.clear();
|
|
|
| int page_index = -1;
|
| @@ -1755,6 +1758,14 @@ bool PDFiumEngine::OnMouseDown(const pp::MouseInputEvent& event) {
|
| if (form_type > FPDF_FORMFIELD_UNKNOWN) { // returns -1 sometimes...
|
| mouse_down_state_.Set(PDFiumPage::FormTypeToArea(form_type), target);
|
|
|
| + // Destroy SelectionChangeInvalidator object before SetInFormTextArea()
|
| + // changes plugin's focus to be in form text area. This way, regular text
|
| + // selection can be cleared when a user clicks into a form text area
|
| + // because the pp::PDF::SetSelectedText() call in
|
| + // ~SelectionChangeInvalidator() still goes to the Mimehandler
|
| + // (not the Renderer).
|
| + selection_invalidator.reset();
|
| +
|
| bool is_valid_control = (form_type == FPDF_FORMFIELD_TEXTFIELD ||
|
| form_type == FPDF_FORMFIELD_COMBOBOX);
|
|
|
| @@ -3583,6 +3594,7 @@ void PDFiumEngine::GetRegion(const pp::Point& location,
|
| }
|
|
|
| void PDFiumEngine::OnSelectionChanged() {
|
| + DCHECK(!in_form_text_area_);
|
| pp::PDF::SetSelectedText(GetPluginInstance(), GetSelectedText().c_str());
|
| }
|
|
|
| @@ -3621,6 +3633,13 @@ void PDFiumEngine::SetSelecting(bool selecting) {
|
| }
|
|
|
| void PDFiumEngine::SetInFormTextArea(bool in_form_text_area) {
|
| + // If focus was previously in form text area, clear form text selection.
|
| + // Clearing needs to be done before changing focus to ensure the correct
|
| + // observer is notified of the change in selection. When |in_form_text_area_|
|
| + // is true, this is the Renderer. After it flips, the MimeHandler is notified.
|
| + if (in_form_text_area_)
|
| + pp::PDF::SetSelectedText(GetPluginInstance(), "");
|
| +
|
| client_->FormTextFieldFocusChange(in_form_text_area);
|
| in_form_text_area_ = in_form_text_area;
|
| }
|
|
|