Changeset 258061 in webkit
- Timestamp:
- Mar 6, 2020 9:46:09 PM (4 years ago)
- Location:
- trunk/Source/WebKitLegacy/mac
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKitLegacy/mac/ChangeLog
r258048 r258061 1 2020-03-06 Simon Fraser <simon.fraser@apple.com> 2 3 Flaky Test: editing/spelling/spellcheck-async.html 4 https://bugs.webkit.org/show_bug.cgi?id=160571 5 6 Reviewed by Ryosuke Niwa. 7 8 Second try to fix this crash; the WebEditorClient can go away before all the NSSpellChecker 9 callbacks are done (which happens off the main thread), so store a WeakPtr<WebEditorClient>. 10 We have to create the WeakPtr on the main thread, and it gets copied into the first block. 11 12 * WebCoreSupport/WebEditorClient.mm: 13 (-[WebEditorSpellCheckResponder initWithClient:sequence:results:]): 14 (-[WebEditorSpellCheckResponder perform]): 15 (WebEditorClient::requestCheckingOfString): 16 1 17 2020-03-06 Simon Fraser <simon.fraser@apple.com> 2 18 -
trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebEditorClient.mm
r258048 r258061 1212 1212 @interface WebEditorSpellCheckResponder : NSObject 1213 1213 { 1214 We bEditorClient*_client;1214 WeakPtr<WebEditorClient> _client; 1215 1215 int _sequence; 1216 1216 RetainPtr<NSArray> _results; 1217 1217 } 1218 - (id)initWithClient:(We bEditorClient*)client sequence:(int)sequence results:(NSArray*)results;1218 - (id)initWithClient:(WeakPtr<WebEditorClient>)client sequence:(int)sequence results:(NSArray*)results; 1219 1219 - (void)perform; 1220 1220 @end 1221 1221 1222 1222 @implementation WebEditorSpellCheckResponder 1223 - (id)initWithClient:(We bEditorClient*)client sequence:(int)sequence results:(NSArray*)results1223 - (id)initWithClient:(WeakPtr<WebEditorClient>)client sequence:(int)sequence results:(NSArray*)results 1224 1224 { 1225 1225 self = [super init]; … … 1234 1234 - (void)perform 1235 1235 { 1236 _client->didCheckSucceed(_sequence, _results.get()); 1236 if (_client) 1237 _client->didCheckSucceed(_sequence, _results.get()); 1237 1238 } 1238 1239 … … 1257 1258 NSRange range = NSMakeRange(0, m_textCheckingRequest->data().text().length()); 1258 1259 NSRunLoop* currentLoop = [NSRunLoop currentRunLoop]; 1260 WeakPtr<WebEditorClient> weakThis = makeWeakPtr(*this); 1259 1261 NSDictionary *options = @{ NSTextCheckingInsertionPointKey : [NSNumber numberWithUnsignedInteger:insertionPointFromCurrentSelection(currentSelection)] }; 1260 1262 [[NSSpellChecker sharedSpellChecker] requestCheckingOfString:m_textCheckingRequest->data().text() range:range types:NSTextCheckingAllSystemTypes options:options inSpellDocumentWithTag:0 completionHandler:^(NSInteger, NSArray* results, NSOrthography*, NSInteger) { 1261 RetainPtr<WebEditorSpellCheckResponder> responder = adoptNS([[WebEditorSpellCheckResponder alloc] initWithClient: this sequence:sequence results:results]);1263 RetainPtr<WebEditorSpellCheckResponder> responder = adoptNS([[WebEditorSpellCheckResponder alloc] initWithClient:weakThis sequence:sequence results:results]); 1262 1264 [currentLoop performBlock:^{ 1263 1265 [responder perform];
Note: See TracChangeset
for help on using the changeset viewer.