Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1468)

Side by Side Diff: Source/web/WebViewImpl.cpp

Issue 970743002: [IME] Fix s_suppressNextKeypressEvent logic in WebViewImpl::setComposition(). (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | Source/web/tests/WebViewTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 2286 matching lines...) Expand 10 before | Expand all | Expand 10 after
2297 // editable because JavaScript may delete a parent node of the composition 2297 // editable because JavaScript may delete a parent node of the composition
2298 // node. In this case, WebKit crashes while deleting texts from the parent 2298 // node. In this case, WebKit crashes while deleting texts from the parent
2299 // node, which doesn't exist any longer. 2299 // node, which doesn't exist any longer.
2300 RefPtrWillBeRawPtr<Range> range = inputMethodController.compositionRange(); 2300 RefPtrWillBeRawPtr<Range> range = inputMethodController.compositionRange();
2301 if (range) { 2301 if (range) {
2302 Node* node = range->startContainer(); 2302 Node* node = range->startContainer();
2303 if (!node || !node->isContentEditable()) 2303 if (!node || !node->isContentEditable())
2304 return false; 2304 return false;
2305 } 2305 }
2306 2306
2307 // If we're not going to fire a keypress event, then the keydown event was 2307 // A keypress event is canceled. If an ongoing composition exists, then the
2308 // canceled. In that case, cancel any existing composition. 2308 // keydown event should have arisen from a handled key (e.g., backspace), so we
2309 if (text.isEmpty() || m_suppressNextKeypressEvent) { 2309 // ignore the cancellation and continue. Otherwise (no ongoing composition) we
2310 // A browser process sent an IPC message which does not contain a valid 2310 // exit and signal success only for attempts to clear the composition.
2311 // string, which means an ongoing composition has been canceled. 2311 if (m_suppressNextKeypressEvent && !inputMethodController.hasComposition()) {
aelias_OOO_until_Jul13 2015/03/02 08:48:57 nit: no braces here
2312 // If the ongoing composition has been canceled, replace the ongoing
2313 // composition string with an empty string and complete it.
2314 String emptyString;
2315 Vector<CompositionUnderline> emptyUnderlines;
2316 inputMethodController.setComposition(emptyString, emptyUnderlines, 0, 0) ;
2317 return text.isEmpty(); 2312 return text.isEmpty();
2318 } 2313 }
2314 // An attempt to clear the composition, possibly an attempt to cancel the
2315 // composition by an IPC message from a browser process.
2316 if (text.isEmpty()) {
aelias_OOO_until_Jul13 2015/03/02 08:48:57 How about deleting this entire block? The setComp
huangs 2015/03/02 16:30:46 We pass different values for underlines, selection
aelias_OOO_until_Jul13 2015/03/02 17:55:37 Yes, but if you look at the implementation in Inpu
huangs 2015/03/02 19:11:15 There's still a code path where |underline| gets u
aelias_OOO_until_Jul13 2015/03/02 19:34:07 I don't think it's some implementation detail that
huangs 2015/03/02 20:09:18 Done.
2317 if (inputMethodController.hasComposition()) {
2318 // If an ongoing composition exists, replacing it with an empty stri ng.
2319 String emptyString;
2320 Vector<CompositionUnderline> emptyUnderlines;
2321 inputMethodController.setComposition(emptyString, emptyUnderlines, 0 , 0);
2322 }
2323 return true;
2324 }
2319 2325
2320 // When the range of composition underlines overlap with the range between 2326 // When the range of composition underlines overlap with the range between
2321 // selectionStart and selectionEnd, WebKit somehow won't paint the selection 2327 // selectionStart and selectionEnd, WebKit somehow won't paint the selection
2322 // at all (see InlineTextBox::paint() function in InlineTextBox.cpp). 2328 // at all (see InlineTextBox::paint() function in InlineTextBox.cpp).
2323 // But the selection range actually takes effect. 2329 // But the selection range actually takes effect.
2324 inputMethodController.setComposition(String(text), 2330 inputMethodController.setComposition(String(text),
2325 CompositionUnderlineVectorBuilder(underlines), 2331 CompositionUnderlineVectorBuilder(underlines),
2326 selectionStart, selectionEnd); 2332 selectionStart, selectionEnd);
2327 2333
2328 return inputMethodController.hasComposition(); 2334 return inputMethodController.hasComposition();
(...skipping 2342 matching lines...) Expand 10 before | Expand all | Expand 10 after
4671 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width 4677 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width
4672 || (constraints.minimumScale == constraints.maximumScale && constraints. minimumScale != -1); 4678 || (constraints.minimumScale == constraints.maximumScale && constraints. minimumScale != -1);
4673 } 4679 }
4674 4680
4675 void WebViewImpl::forceNextWebGLContextCreationToFail() 4681 void WebViewImpl::forceNextWebGLContextCreationToFail()
4676 { 4682 {
4677 WebGLRenderingContext::forceNextWebGLContextCreationToFail(); 4683 WebGLRenderingContext::forceNextWebGLContextCreationToFail();
4678 } 4684 }
4679 4685
4680 } // namespace blink 4686 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | Source/web/tests/WebViewTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698