Browse Source

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

* chore: make macOS spellchecker fns formal no-ops

* docs: correct no-op note

* test: add no-op specs

Co-authored-by: Shelley Vohr <[email protected]>
trop[bot] 2 years ago
parent
commit
12992b253c
3 changed files with 43 additions and 1 deletions
  1. 1 1
      docs/api/session.md
  2. 4 0
      shell/browser/api/electron_api_session.cc
  3. 38 0
      spec-main/spellchecker-spec.ts

+ 1 - 1
docs/api/session.md

@@ -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)`
 

+ 4 - 0
shell/browser/api/electron_api_session.cc

@@ -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);
@@ -1039,10 +1040,12 @@ 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 "
@@ -1050,6 +1053,7 @@ void SetSpellCheckerDictionaryDownloadURL(gin_helper::ErrorThrower thrower,
     return;
   }
   SpellcheckHunspellDictionary::SetBaseDownloadURL(url);
+#endif
 }
 
 v8::Local<v8::Promise> Session::ListWordsInSpellCheckerDictionary() {

+ 38 - 0
spec-main/spellchecker-spec.ts

@@ -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');