Browse Source

fix: enable spell checking, which broke in upgrade to ch66

Chromium commit [03563dd163][1] changed the way that the
spellcheck-enabled status was checked, defaulting to false.

Added the first (!) test for spellchecking, too.

Fixes #13608.

[1]: https://chromium.googlesource.com/chromium/src/+/03563dd1635a028d286beaf8b4f3d637cc4a8830
Jeremy Apthorp 6 years ago
parent
commit
bdceea6aca

+ 4 - 0
atom/renderer/api/atom_api_spell_check_client.cc

@@ -115,6 +115,10 @@ void SpellCheckClient::RequestCheckingOfText(
                      base::Owned(pending_request_param_.release())));
 }
 
+bool SpellCheckClient::IsSpellCheckingEnabled() const {
+  return true;
+}
+
 void SpellCheckClient::ShowSpellingUI(bool show) {}
 
 bool SpellCheckClient::IsShowingSpellingUI() {

+ 1 - 0
atom/renderer/api/atom_api_spell_check_client.h

@@ -46,6 +46,7 @@ class SpellCheckClient : public blink::WebSpellCheckPanelHostClient,
   void RequestCheckingOfText(
       const blink::WebString& textToCheck,
       blink::WebTextCheckingCompletion* completionCallback) override;
+  bool IsSpellCheckingEnabled() const override;
 
   // blink::WebSpellCheckPanelHostClient:
   void ShowSpellingUI(bool show) override;

+ 20 - 0
spec/api-web-frame-spec.js

@@ -1,8 +1,14 @@
 const assert = require('assert')
+const chai = require('chai')
+const dirtyChai = require('dirty-chai')
 const path = require('path')
 const {closeWindow} = require('./window-helpers')
 const {remote, webFrame} = require('electron')
 const {BrowserWindow, protocol, ipcMain} = remote
+const {emittedOnce} = require('./events-helpers')
+
+const {expect} = chai
+chai.use(dirtyChai)
 
 /* Most of the APIs here don't use standard callbacks */
 /* eslint-disable standard/no-callback-literal */
@@ -138,4 +144,18 @@ describe('webFrame module', function () {
       webFrame.setLayoutZoomLevelLimits(0, 25)
     })
   })
+
+  it('calls a spellcheck provider', async () => {
+    w = new BrowserWindow({show: false})
+    w.loadURL(`file://${fixtures}/pages/webframe-spell-check.html`)
+    await emittedOnce(w.webContents, 'did-finish-load')
+
+    const spellCheckerFeedback = emittedOnce(ipcMain, 'spec-spell-check')
+    const misspelledWord = 'spleling'
+    for (const keyCode of [...misspelledWord, ' ']) {
+      w.webContents.sendInputEvent({type: 'char', keyCode})
+    }
+    const [, text] = await spellCheckerFeedback
+    expect(text).to.equal(misspelledWord)
+  })
 })

+ 13 - 0
spec/fixtures/pages/webframe-spell-check.html

@@ -0,0 +1,13 @@
+<html>
+<body>
+<script type="text/javascript" charset="utf-8">
+  const {ipcRenderer, webFrame} = require('electron')
+  webFrame.setSpellCheckProvider('en-US', true, {
+    spellCheck: text => {
+      ipcRenderer.send('spec-spell-check', text)
+    }
+  })
+</script>
+<input autofocus />
+</body>
+</html>