* 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 world_id,
    const std::string& security_policy) {
  web_frame_->SetIsolatedWorldContentSecurityPolicy(
      world_id, blink::WebString::FromUTF8(security_policy));
}
void WebFrame::SetIsolatedWorldHumanReadableName(
    int world_id,
    const std::string& name) {
  web_frame_->SetIsolatedWorldHumanReadableName(
      world_id, blink::WebString::FromUTF8(name));
}
mate::Handle<WebFrame> WebFrame::Create(v8::Isolate* isolate) {
  return mate::CreateHandle(isolate, new WebFrame(isolate));
}
blink::WebCache::ResourceTypeStats WebFrame::GetResourceUsage(
    v8::Isolate* isolate) {
  blink::WebCache::ResourceTypeStats stats;
  blink::WebCache::GetResourceTypeStats(&stats);
  return stats;
}
void WebFrame::ClearCache(v8::Isolate* isolate) {
  isolate->IdleNotificationDeadline(0.5);
  blink::WebCache::Clear();
  base::MemoryPressureListener::NotifyMemoryPressure(
    base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL);
}
void WebFrame::BuildPrototype(