* 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
int element_instance_id,
    const GuestViewContainer::ResizeCallback& callback) {
  auto guest_view_container = GuestViewContainer::FromID(element_instance_id);
  if (guest_view_container)
    guest_view_container->RegisterElementResizeCallback(callback);
}
void WebFrame::AttachGuest(int id) {
  content::RenderFrame::FromWebFrame(web_frame_)->AttachGuest(id);
}
void WebFrame::DetachGuest(int id) {
  content::RenderFrame::FromWebFrame(web_frame_)->DetachGuest(id);
}
void WebFrame::SetSpellCheckProvider(mate::Arguments* args,
                                     const std::string& language,
                                     bool auto_spell_correct_turned_on,
                                     v8::Local<v8::Object> provider) {
  if (!provider->Has(mate::StringToV8(args->isolate(), "spellCheck"))) {
    args->ThrowError("\"spellCheck\" has to be defined");
    return;
  }
  spell_check_client_.reset(new SpellCheckClient(
      language, auto_spell_correct_turned_on, args->isolate(), provider));
  web_frame_->SetSpellCheckPanelHostClient(spell_check_client_.get());
  web_frame_->SetTextCheckClient(spell_check_client_.get());
}
void WebFrame::RegisterURLSchemeAsSecure(const std::string& scheme) {