Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: make macOS spellchecker fns formal no-ops #35679

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/api/session.md
Expand Up @@ -932,7 +932,7 @@ Returns `string[]` - An array of language codes the spellchecker is enabled for.
will fallback to using `en-US`. By default on launch if this setting is an empty list Electron will try to populate this
setting with the current OS locale. This setting is persisted across restarts.

**Note:** On macOS the OS spellchecker is used and has its own list of languages. This API is a no-op on macOS.
**Note:** On macOS the OS spellchecker is used and has its own list of languages. On macOS, this API will return whichever languages have been configured by the OS.

#### `ses.setSpellCheckerDictionaryDownloadURL(url)`

Expand Down
4 changes: 4 additions & 0 deletions shell/browser/api/electron_api_session.cc
Expand Up @@ -1024,6 +1024,7 @@ base::Value Session::GetSpellCheckerLanguages() {
void Session::SetSpellCheckerLanguages(
gin_helper::ErrorThrower thrower,
const std::vector<std::string>& languages) {
#if !BUILDFLAG(IS_MAC)
base::Value::List language_codes;
for (const std::string& lang : languages) {
std::string code = spellcheck::GetCorrespondingSpellCheckLanguage(lang);
Expand All @@ -1039,17 +1040,20 @@ void Session::SetSpellCheckerLanguages(
// Enable spellcheck if > 0 languages, disable if no languages set
browser_context_->prefs()->SetBoolean(spellcheck::prefs::kSpellCheckEnable,
!languages.empty());
#endif
}

void SetSpellCheckerDictionaryDownloadURL(gin_helper::ErrorThrower thrower,
const GURL& url) {
#if !BUILDFLAG(IS_MAC)
if (!url.is_valid()) {
thrower.ThrowError(
"The URL you provided to setSpellCheckerDictionaryDownloadURL is not a "
"valid URL");
return;
}
SpellcheckHunspellDictionary::SetBaseDownloadURL(url);
#endif
}

v8::Local<v8::Promise> Session::ListWordsInSpellCheckerDictionary() {
Expand Down
38 changes: 38 additions & 0 deletions spec-main/spellchecker-spec.ts
Expand Up @@ -212,6 +212,44 @@ ifdescribe(features.isBuiltinSpellCheckerEnabled())('spellchecker', function ()
});
});

describe('ses.setSpellCheckerLanguages', () => {
const isMac = process.platform === 'darwin';

ifit(isMac)('should be a no-op when setSpellCheckerLanguages is called on macOS', () => {
expect(() => {
w.webContents.session.setSpellCheckerLanguages(['i-am-a-nonexistent-language']);
}).to.not.throw();
});

ifit(!isMac)('should throw when a bad language is passed', () => {
expect(() => {
w.webContents.session.setSpellCheckerLanguages(['i-am-a-nonexistent-language']);
}).to.throw(/Invalid language code provided: "i-am-a-nonexistent-language" is not a valid language code/);
});

ifit(!isMac)('should not throw when a recognized language is passed', () => {
expect(() => {
w.webContents.session.setSpellCheckerLanguages(['es']);
}).to.not.throw();
});
});

describe('SetSpellCheckerDictionaryDownloadURL', () => {
const isMac = process.platform === 'darwin';

ifit(isMac)('should be a no-op when a bad url is passed on macOS', () => {
expect(() => {
w.webContents.session.setSpellCheckerDictionaryDownloadURL('i-am-not-a-valid-url');
}).to.not.throw();
});

ifit(!isMac)('should throw when a bad url is passed', () => {
expect(() => {
w.webContents.session.setSpellCheckerDictionaryDownloadURL('i-am-not-a-valid-url');
}).to.throw(/The URL you provided to setSpellCheckerDictionaryDownloadURL is not a valid URL/);
});
});

describe('ses.removeWordFromSpellCheckerDictionary', () => {
it('should successfully remove words to custom dictionary', async () => {
const result1 = ses.addWordToSpellCheckerDictionary('foobar');
Expand Down