There is a bug in the logic for determining if `props` is a plain object. This bug results in a false positive, flooding the console with hundreds of instances of this warning: "Expected props argument to be a plain object. Properties defined in its prototype chain will be ignored.".

The code that's failing is in [ReactElement.js, Line 210 in the v15.3.1 branch](https://github.com/facebook/react/blob/v15.3.1/src/isomorphic/classic/element/ReactElement.js#L210) (line number is probably different in master)

> config.**proto** == null || config.**proto** === Object.prototype,

This fails when the props object is created in one iframe, but uses an instance of React from another frame. Each browser window/tab/frame has it's own instance of the Object constructor. For instance, `document.querySelector('iframe').contentWindow.Object === Object` always results in `false`.

Check out this [demo](https://jsfiddle.net/05ugxo5f/4/), which shows the false-positive warning message.

it('should steal the ref if a new ref is specified', () => {
    var Parent = React.createClass({
      render: function() {
        var clone = React.cloneElement(this.props.children, {ref: 'xyz'});
        return <div>{clone}</div>;
      },
    });
    var Grandparent = React.createClass({
      render: function() {
        return <Parent ref="parent"><span ref="child" /></Parent>;
      },
    });
    var component = ReactTestUtils.renderIntoDocument(<Grandparent />);
    expect(component.refs.child).toBeUndefined();
    expect(component.refs.parent.refs.xyz.tagName).toBe('SPAN');
  });
  it('should overwrite props', () => {
    var Component = React.createClass({
      render: function() {
        expect(this.props.myprop).toBe('xyz');
        return <div />;
      },
    });
    ReactTestUtils.renderIntoDocument(
      React.cloneElement(<Component myprop="abc" />, {myprop: 'xyz'})
    );
  });
  it('should normalize props with default values', () => {
    var Component = React.createClass({
      getDefaultProps: function() {