Chromium Code Reviews| Index: content/browser/renderer_host/render_widget_host_view_mac.mm |
| diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm |
| index adc93fa634f9c05bb268f9854f7223026df5a19a..75de1497765a1322dd36ff2b55696fa0bb51d743 100644 |
| --- a/content/browser/renderer_host/render_widget_host_view_mac.mm |
| +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm |
| @@ -553,6 +553,11 @@ RenderWidgetHostViewMac::~RenderWidgetHostViewMac() { |
| if (!is_guest_view_hack_) |
| render_widget_host_->SetView(NULL); |
| } |
| + |
| + // In case the view is deleted (by cocoa view) before calling destroy, we need |
| + // to remove this view from the observer list of TextInputManager. |
| + if (text_input_manager_ && text_input_manager_->HasObserver(this)) |
| + text_input_manager_->RemoveObserver(this); |
| } |
| void RenderWidgetHostViewMac::SetDelegate( |
| @@ -574,6 +579,11 @@ ui::TextInputType RenderWidgetHostViewMac::GetTextInputType() { |
| return GetTextInputManager()->GetTextInputState()->type; |
| } |
| +RenderWidgetHostImpl* RenderWidgetHostViewMac::GetActiveWidget() { |
| + return !!GetTextInputManager() ? GetTextInputManager()->GetActiveWidget() |
|
Avi (use Gerrit)
2016/08/10 21:01:40
You shouldn't need the !!.
EhsanK
2016/08/10 21:27:28
Acknowledged.
|
| + : nullptr; |
| +} |
| + |
| /////////////////////////////////////////////////////////////////////////////// |
| // RenderWidgetHostViewMac, RenderWidgetHostView implementation: |
| @@ -2950,8 +2960,10 @@ extern NSString *NSTextInputReplacementRangeAttributeName; |
| // If we are handling a key down event, then ConfirmComposition() will be |
| // called in keyEvent: method. |
| if (!handlingKeyDown_) { |
| - renderWidgetHostView_->render_widget_host_->ImeConfirmComposition( |
| - base::string16(), gfx::Range::InvalidRange(), false); |
| + if (renderWidgetHostView_->GetActiveWidget()) { |
| + renderWidgetHostView_->GetActiveWidget()->ImeConfirmComposition( |
| + base::string16(), gfx::Range::InvalidRange(), false); |
| + } |
| } else { |
| unmarkTextCalled_ = YES; |
| } |
| @@ -2986,15 +2998,17 @@ extern NSString *NSTextInputReplacementRangeAttributeName; |
| // called in keyEvent: method. |
| // Input methods of Mac use setMarkedText calls with an empty text to cancel |
| // an ongoing composition. So, we should check whether or not the given text |
| - // is empty to update the input method state. (Our input method backend can |
| + // is empty to update the input method state. (Our input method backend |
| // automatically cancels an ongoing composition when we send an empty text. |
| // So, it is OK to send an empty text to the renderer.) |
| if (handlingKeyDown_) { |
| setMarkedTextReplacementRange_ = gfx::Range(replacementRange); |
| } else { |
| - renderWidgetHostView_->render_widget_host_->ImeSetComposition( |
| - markedText_, underlines_, gfx::Range(replacementRange), |
| - newSelRange.location, NSMaxRange(newSelRange)); |
| + if (renderWidgetHostView_->GetActiveWidget()) { |
| + renderWidgetHostView_->GetActiveWidget()->ImeSetComposition( |
| + markedText_, underlines_, gfx::Range(replacementRange), |
| + newSelRange.location, NSMaxRange(newSelRange)); |
| + } |
| } |
| } |
| @@ -3029,7 +3043,7 @@ extern NSString *NSTextInputReplacementRangeAttributeName; |
| - (void)insertText:(id)string replacementRange:(NSRange)replacementRange { |
| // An input method has characters to be inserted. |
| // Same as Linux, Mac calls this method not only: |
| - // * when an input method finishs composing text, but also; |
| + // * when an input method finishes composing text, but also; |
| // * when we type an ASCII character (without using input methods). |
| // When we aren't using input methods, we should send the given character as |
| // a Char event so it is dispatched to an onkeypress() event handler of |
| @@ -3048,8 +3062,10 @@ extern NSString *NSTextInputReplacementRangeAttributeName; |
| textToBeInserted_.append(base::SysNSStringToUTF16(im_text)); |
| } else { |
| gfx::Range replacement_range(replacementRange); |
| - renderWidgetHostView_->render_widget_host_->ImeConfirmComposition( |
| - base::SysNSStringToUTF16(im_text), replacement_range, false); |
| + if (renderWidgetHostView_->GetActiveWidget()) { |
| + renderWidgetHostView_->GetActiveWidget()->ImeConfirmComposition( |
| + base::SysNSStringToUTF16(im_text), replacement_range, false); |
| + } |
| } |
| // Inserting text will delete all marked text automatically. |
| @@ -3180,9 +3196,10 @@ extern NSString *NSTextInputReplacementRangeAttributeName; |
| if (!hasMarkedText_) |
| return; |
| - if (renderWidgetHostView_->render_widget_host_) |
| - renderWidgetHostView_->render_widget_host_->ImeConfirmComposition( |
| + if (renderWidgetHostView_->GetActiveWidget()) { |
| + renderWidgetHostView_->GetActiveWidget()->ImeConfirmComposition( |
| base::string16(), gfx::Range::InvalidRange(), false); |
| + } |
| [self cancelComposition]; |
| } |