Lock on shared NSSpellChecker and use release pool

Closes #335
This commit is contained in:
Kevin Sawicki
2013-03-01 10:39:06 -08:00
parent 1c13ab8511
commit 7bfb07a25a

View File

@@ -524,24 +524,33 @@ namespace v8_extensions {
else if (name == "isMisspelled") {
NSString *word = stringFromCefV8Value(arguments[0]);
NSRange range = [[NSSpellChecker sharedSpellChecker] checkSpellingOfString:word startingAt:0];
retval = CefV8Value::CreateBool(range.length > 0);
NSSpellChecker *spellChecker = [NSSpellChecker sharedSpellChecker];
@synchronized(spellChecker) {
@autoreleasepool {
NSRange range = [spellChecker checkSpellingOfString:word startingAt:0];
retval = CefV8Value::CreateBool(range.length > 0);
}
}
return true;
}
else if (name == "getCorrectionsForMisspelling") {
NSString *misspelling = stringFromCefV8Value(arguments[0]);
NSSpellChecker *spellchecker = [NSSpellChecker sharedSpellChecker];
NSString *language = [spellchecker language];
NSRange range;
range.location = 0;
range.length = [misspelling length];
NSArray *guesses = [spellchecker guessesForWordRange:range inString:misspelling language:language inSpellDocumentWithTag:0];
CefRefPtr<CefV8Value> v8Guesses = CefV8Value::CreateArray([guesses count]);
for (int i = 0; i < [guesses count]; i++) {
v8Guesses->SetValue(i, CefV8Value::CreateString([[guesses objectAtIndex:i] UTF8String]));
NSSpellChecker *spellChecker = [NSSpellChecker sharedSpellChecker];
@synchronized(spellChecker) {
@autoreleasepool {
NSString *language = [spellChecker language];
NSRange range;
range.location = 0;
range.length = [misspelling length];
NSArray *guesses = [spellChecker guessesForWordRange:range inString:misspelling language:language inSpellDocumentWithTag:0];
CefRefPtr<CefV8Value> v8Guesses = CefV8Value::CreateArray([guesses count]);
for (int i = 0; i < [guesses count]; i++) {
v8Guesses->SetValue(i, CefV8Value::CreateString([[guesses objectAtIndex:i] UTF8String]));
}
retval = v8Guesses;
}
}
retval = v8Guesses;
return true;
}