12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /**
- * Copyright (c) 2015-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- */
-
- 'use strict';
-
- const React = require('react');
- const ReactNative = require('react-native');
- const { WebView } = ReactNative;
-
- const { TestModule } = ReactNative.NativeModules;
-
- class WebViewTest extends React.Component {
- render() {
- let firstMessageReceived = false;
- let secondMessageReceived = false;
- function processMessage(e) {
- const message = e.nativeEvent.data;
- if (message === 'First') {
- firstMessageReceived = true;
- }
- if (message === 'Second') {
- secondMessageReceived = true;
- }
-
- // got both messages
- if (firstMessageReceived && secondMessageReceived) {
- TestModule.markTestPassed(true);
- }
- // wait for next message
- else if (firstMessageReceived && !secondMessageReceived) {
- return;
- }
- // first message got lost
- else if (!firstMessageReceived && secondMessageReceived) {
- throw new Error('First message got lost');
- }
- }
- const html =
- 'Hello world' +
- '<script>' +
- "window.setTimeout(function(){window.postMessage('First'); window.postMessage('Second')}, 0)" +
- '</script>';
-
- // fail if messages didn't get through;
- window.setTimeout(function () {
- throw new Error(
- firstMessageReceived
- ? 'Both messages got lost'
- : 'Second message got lost',
- );
- }, 10000);
-
- const source = {
- html: html,
- };
-
- return (
- <WebView
- source={source}
- onMessage={processMessage}
- originWhitelist={['about:blank']}
- />
- );
- }
- }
-
- WebViewTest.displayName = 'WebViewTest';
-
- module.exports = WebViewTest;
|