Plumb plugin placeholder logic to the Blink API boundary.

This crosses two API boundaries the core-to-web boundary and the embedder
boundary. Much of the complexity arises from the patterns needed to satisfy
layering rules.

This change adds:

- WebPluginPlaceholder, a Blink API class to represent a plugin placeholder.
Currently only contains a plaintext message, but it is expected that this will
expand.

- WebFrameClient::createPluginPlaceholder, which allows the embedder to supply a
WebPluginPlaceholder during loading (before being asked to load the plugin
itself).

- PluginPlaceholder, which represents some placeholder content that can be
loaded into a plugin element.

- PluginPlaceholderImpl, which implements PluginPlaceholder and populates a
PluginPlaceholderElement with content from a WebPluginPlaceholder.

- FrameLoaderClient::createPluginPlaceholder, which creates a plugin placeholder
if appropriate upon request from the plugin element.

- FrameLoaderClientImpl::createPluginPlaceholder, which implements the previous
by delegating to the WebFrameClient and wrapping with a PluginPlaceholderImpl.

- Unit tests for PluginPlaceholderImpl and FrameLoaderClientImpl. The latter has
been rewritten to use gmock.

It is likely that in the future the embedder-supplied placeholder may need to
request changes to the UI on its own (e.g. due to changes in plugin settings).
When that happens, I expect to add a WebPluginPlaceholderContainer interface
implemented by PluginPlaceholderImpl.

BUG=364716

Review URL: https://codereview.chromium.org/598763002

git-svn-id: svn://svn.chromium.org/blink/trunk@183489 bbb929c8-8fbe-4397-9dbb-9b2b20218538