**Do you want to request a _feature_ or report a _bug_?**

This is a bug report.

**What is the current behavior?**

In Safari, the type of input field is not updated properly. Consider the example linked below. It is a React component that display a button and an input field. The type of input field will be toggled between file or text by clicking the button. The change of input type is not being reflected.

I believe this is an issue with Safari. Setting the `type` property in Safari does not affect what is being rendered:

``` javascript
var a = document.createElement("input");
a.type = "text";
document.body.appendChild(a); // A text input is shown
a.type = "file"; // The input remains a text input in Safari.
```

**If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem via https://jsfiddle.net or similar (template: https://jsfiddle.net/reactjs/69z2wepo/).**

https://jsfiddle.net/x1xtbjt0/2/

**What is the expected behavior?**

The input type should be changed, as in Chrome and Firefox.

**Which versions of React, and which browser / OS are affected by this issue? Did this work in previous versions of React?**

React: 15.1.0
ReactDOM: 15.1.0
Browser: Safari 9.1.1, Chrome 51.0.2704.103, Firefox 47.0
OS: OS X 10.11.5

instance =
      <input type="checkbox" checkedLink={link} valueLink={emptyFunction} />;
    expect(() => ReactDOM.render(instance, node)).toThrow();
  });
  it('should warn if value is null', function() {
    ReactTestUtils.renderIntoDocument(<input type="text" value={null} />);
    expect(console.error.calls.argsFor(0)[0]).toContain(
      '`value` prop on `input` should not be null. ' +
      'Consider using the empty string to clear the component or `undefined` ' +
      'for uncontrolled components.'
    );
    ReactTestUtils.renderIntoDocument(<input type="text" value={null} />);
    expect(console.error.calls.count()).toBe(1);
  });
  it('should warn if checked and defaultChecked props are specified', function() {
    ReactTestUtils.renderIntoDocument(
      <input type="radio" checked={true} defaultChecked={true} readOnly={true} />
    );
    expect(console.error.calls.argsFor(0)[0]).toContain(
      'A component contains an input of type radio with both checked and defaultChecked props. ' +
      'Input elements must be either controlled or uncontrolled ' +
      '(specify either the checked prop, or the defaultChecked prop, but not ' +
      'both). Decide between using a controlled or uncontrolled input ' +
      'element and remove one of these props. More info: ' +
      'https://fb.me/react-controlled-components'
    );
    ReactTestUtils.renderIntoDocument(
      <input type="radio" checked={true} defaultChecked={true} readOnly={true} />
    );
    expect(console.error.calls.count()).toBe(1);