* Electron version: 1.8.x only. Tested with 1.8.1, 1.8.2-beta.1, 1.8.2-beta.2. Not seen with any 1.7 or 1.6
* Operating system: macOS, ubuntu 17.04, probably others

### Expected behavior

Setting the following should result in all words being marked as mispelled on the page as in electron versions prior to 1.8.

```js
require('electron').webFrame.setSpellCheckProvider('enUS', true, {
	spellCheck: (word) => false
})
```

### Actual behavior

In 1.8.* Words are marked as mispelled in the main frame, but not child iframes. See screenshots below....

**1.8.2-beta.2**
![screen shot 2017-11-17 at 11 35 55](https://user-images.githubusercontent.com/103586/32945726-79af89b6-cb8c-11e7-8b03-7b1d3628ad22.png)

**1.7.9**
![screen shot 2017-11-17 at 11 36 56](https://user-images.githubusercontent.com/103586/32945755-8ad98052-cb8c-11e7-8bec-74a81d6f0556.png)

### How to reproduce

```
git clone https://github.com/wavebox/electron-quick-start.git
cd electron-quick-start
git checkout 1_8_spellchecker
npm install
npm start
```

I've done a little bit of digging, but haven't come up with a solid solution. It looks like the way the spell check provider works was changed between chrome 58 and 59. `SetTextCheckClient` was added to `atom_api_web_frame.cc` in the 1.8 upgrade and a little searching on that reveals [this conversation chromium](https://bugs.chromium.org/p/chromium/issues/detail?id=638361) which talks about the refactoring the spell checker to be frame-based rather than view-based.
atom/renderer/api/atom_api_web_frame.cc
web_frame_->GetDocument().InsertStyleSheet(blink::WebString::FromUTF8(css));
}
void WebFrame::ExecuteJavaScript(const base::string16& code,
                                 mate::Arguments* args) {
  bool has_user_gesture = false;
  args->GetNext(&has_user_gesture);
  ScriptExecutionCallback::CompletionCallback completion_callback;
  args->GetNext(&completion_callback);
  std::unique_ptr<blink::WebScriptExecutionCallback> callback(
      new ScriptExecutionCallback(completion_callback));
  web_frame_->RequestExecuteScriptAndReturnValue(
      blink::WebScriptSource(blink::WebString::FromUTF16(code)),
      has_user_gesture,
      callback.release());
}
void WebFrame::ExecuteJavaScriptInIsolatedWorld(
    int world_id,
    const std::vector<mate::Dictionary>& scripts,
    mate::Arguments* args) {
  std::vector<blink::WebScriptSource> sources;
  for (const auto& script : scripts) {
    base::string16 code;
    base::string16 url;
    int start_line = 1;
    script.Get("url", &url);
    script.Get("startLine", &start_line);