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.

return {prop: 'testKey'};
      },
      render: function() {
        return <span />;
      },
    });
    var instance = React.createElement(Component);
    var clonedInstance = React.cloneElement(instance, {prop: undefined});
    expect(clonedInstance.props.prop).toBe('testKey');
    var clonedInstance2 = React.cloneElement(instance, {prop: null});
    expect(clonedInstance2.props.prop).toBe(null);
    var instance2 = React.createElement(Component, {prop: 'newTestKey'});
    var cloneInstance3 = React.cloneElement(instance2, {prop: undefined});
    expect(cloneInstance3.props.prop).toBe('testKey');
    var cloneInstance4 = React.cloneElement(instance2, {});
    expect(cloneInstance4.props.prop).toBe('newTestKey');
  });
  it('warns for keys for arrays of elements in rest args', () => {
    spyOn(console, 'error');
    React.cloneElement(<div />, null, [<div />, <div />]);
    expect(console.error.calls.count()).toBe(1);
    expect(console.error.calls.argsFor(0)[0]).toContain(
      'Each child in an array or iterator should have a unique "key" prop.'
    );
  });
  it('does not warns for arrays of elements with keys', () => {
    spyOn(console, 'error');
    React.cloneElement(<div />, null, [<div key="#1" />, <div key="#2" />]);
    expect(console.error.calls.count()).toBe(0);
  });