Add thread violation checks to WebView public APIs.
authormark.lam@apple.com <mark.lam@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 13 Feb 2016 00:22:53 +0000 (00:22 +0000)
committermark.lam@apple.com <mark.lam@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 13 Feb 2016 00:22:53 +0000 (00:22 +0000)
commit178767c5f7383abf9cd454936ec4115df8496c9f
tree73d401af3b909f5f9ffa2aef19063a92ef67ce5e
parentdee168bfd926f9fd55e6ad3ce0789aff5da4c3f8
Add thread violation checks to WebView public APIs.
https://bugs.webkit.org/show_bug.cgi?id=154183

Reviewed by Geoffrey Garen.

This will help clients of the API detect the violations sooner rather than
having to debug mysterious crashes / failures later.

To that end, I've added thread violation checks to the following functions
because ...

* WebView/WebView.mm:
(-[WebView setCustomTextEncodingName:]):
- Uses the FrameLoader (which is for the main thread only).

(-[WebView stringByEvaluatingJavaScriptFromString:]):
- Invokes JavaScript (which is for the main thread only).

(-[WebView windowScriptObject]):
- Invokes ScriptController::windowScriptObject() which requires the JSLock.

(-[WebView setGroupName:]):
- Manipulates the PageGroup and Page (which is for the main thread only).

(-[WebView setMainFrameURL:]):
- Uses the FrameLoader (which is for the main thread only).

(-[WebView mainFrameTitle]):
- Uses the FrameLoader::documentLoader() (via [WebFrame _dataSource]) which
  is RefPtr, and therefore not safe for other threads to access.

(-[WebView mainFrameIcon]):
- Uses the FrameLoader::documentLoader() (via [WebFrame _dataSource]) which
  is RefPtr, and therefore not safe for other threads to access.
- Uses [WebIconDatabase sharedIconDatabase] which does a singleton
  instantiation but is not protected by a lock.

(-[WebView setDrawsBackground:]):
- Potentially manipulates a RenderView (via FrameView::setBaseBackgroundColor,
  via [WebFrame _updateBackgroundAndUpdatesWhileOffscreen]), and RenderView
  is for main thread only use.

(-[WebView setShouldUpdateWhileOffscreen:]):
- Uses [WebFrame _updateBackgroundAndUpdatesWhileOffscreen].  Hence, for the
  main thread only.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196527 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebKit/mac/ChangeLog
Source/WebKit/mac/WebView/WebView.mm