* 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
double result = 0.0;
  content::RenderView* render_view =
      content::RenderView::FromWebView(web_frame_->View());
  render_view->Send(
      new AtomViewHostMsg_GetZoomLevel(render_view->GetRoutingID(), &result));
  return result;
}
double WebFrame::SetZoomFactor(double factor) {
  return blink::WebView::ZoomLevelToZoomFactor(SetZoomLevel(
      blink::WebView::ZoomFactorToZoomLevel(factor)));
}
double WebFrame::GetZoomFactor() const {
  return blink::WebView::ZoomLevelToZoomFactor(GetZoomLevel());
}
void WebFrame::SetVisualZoomLevelLimits(double min_level, double max_level) {
  web_frame_->View()->SetDefaultPageScaleLimits(min_level, max_level);
}
void WebFrame::SetLayoutZoomLevelLimits(double min_level, double max_level) {
  web_frame_->View()->ZoomLimitsChanged(min_level, max_level);
}
v8::Local<v8::Value> WebFrame::RegisterEmbedderCustomElement(
    const base::string16& name, v8::Local<v8::Object> options) {
  blink::WebExceptionCode c = 0;
  return web_frame_->GetDocument().RegisterEmbedderCustomElement(
      blink::WebString::FromUTF16(name), options, c);
}
void WebFrame::RegisterElementResizeCallback(