OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 var util = {}; | 5 var util = {}; |
6 var embedder = {}; | 6 var embedder = {}; |
7 embedder.baseGuestURL = ''; | 7 embedder.baseGuestURL = ''; |
8 embedder.emptyGuestURL = ''; | 8 embedder.emptyGuestURL = ''; |
9 embedder.windowOpenGuestURL = ''; | 9 embedder.windowOpenGuestURL = ''; |
10 embedder.noReferrerGuestURL = ''; | 10 embedder.noReferrerGuestURL = ''; |
11 embedder.redirectGuestURL = ''; | 11 embedder.redirectGuestURL = ''; |
12 embedder.redirectGuestURLDest = ''; | 12 embedder.redirectGuestURLDest = ''; |
13 embedder.closeSocketURL = ''; | 13 embedder.closeSocketURL = ''; |
14 embedder.tests = {}; | 14 embedder.tests = {}; |
15 | 15 |
16 embedder.setUp_ = function(config) { | 16 embedder.setUp_ = function(config) { |
17 if (!config || !config.testServer) { | 17 if (!config || !config.testServer) { |
18 return; | 18 return; |
19 } | 19 } |
20 embedder.baseGuestURL = 'http://localhost:' + config.testServer.port; | 20 embedder.baseGuestURL = 'http://localhost:' + config.testServer.port; |
21 embedder.emptyGuestURL = embedder.baseGuestURL + | 21 embedder.emptyGuestURL = embedder.baseGuestURL + |
22 '/extensions/platform_apps/web_view/shim/empty_guest.html'; | 22 '/extensions/platform_apps/web_view/shim/empty_guest.html'; |
23 embedder.windowOpenGuestURL = embedder.baseGuestURL + | 23 embedder.windowOpenGuestURL = embedder.baseGuestURL + |
24 '/extensions/platform_apps/web_view/shim/guest.html'; | 24 '/extensions/platform_apps/web_view/shim/guest.html'; |
| 25 embedder.windowOpenGuestFromSameURL = embedder.baseGuestURL + |
| 26 '/extensions/platform_apps/web_view/shim/guest_from_opener.html'; |
25 embedder.noReferrerGuestURL = embedder.baseGuestURL + | 27 embedder.noReferrerGuestURL = embedder.baseGuestURL + |
26 '/extensions/platform_apps/web_view/shim/guest_noreferrer.html'; | 28 '/extensions/platform_apps/web_view/shim/guest_noreferrer.html'; |
27 embedder.detectUserAgentURL = embedder.baseGuestURL + '/detect-user-agent'; | 29 embedder.detectUserAgentURL = embedder.baseGuestURL + '/detect-user-agent'; |
28 embedder.redirectGuestURL = embedder.baseGuestURL + '/server-redirect'; | 30 embedder.redirectGuestURL = embedder.baseGuestURL + '/server-redirect'; |
29 embedder.redirectGuestURLDest = embedder.baseGuestURL + | 31 embedder.redirectGuestURLDest = embedder.baseGuestURL + |
30 '/extensions/platform_apps/web_view/shim/guest_redirect.html'; | 32 '/extensions/platform_apps/web_view/shim/guest_redirect.html'; |
31 embedder.closeSocketURL = embedder.baseGuestURL + '/close-socket'; | 33 embedder.closeSocketURL = embedder.baseGuestURL + '/close-socket'; |
32 embedder.testImageBaseURL = embedder.baseGuestURL + | 34 embedder.testImageBaseURL = embedder.baseGuestURL + |
33 '/extensions/platform_apps/web_view/shim/'; | 35 '/extensions/platform_apps/web_view/shim/'; |
34 embedder.virtualURL = 'http://virtualurl/'; | 36 embedder.virtualURL = 'http://virtualurl/'; |
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
742 // Removing after navigation should not change the partition. | 744 // Removing after navigation should not change the partition. |
743 webview.removeAttribute('partition'); | 745 webview.removeAttribute('partition'); |
744 embedder.test.assertEq('testme', webview.partition); | 746 embedder.test.assertEq('testme', webview.partition); |
745 embedder.test.succeed(); | 747 embedder.test.succeed(); |
746 }; | 748 }; |
747 webview.addEventListener('loadstop', loadstopHandler); | 749 webview.addEventListener('loadstop', loadstopHandler); |
748 | 750 |
749 webview.setAttribute('src', 'data:text/html,<html><body>guest</body></html>'); | 751 webview.setAttribute('src', 'data:text/html,<html><body>guest</body></html>'); |
750 } | 752 } |
751 | 753 |
| 754 function testAddContentScript() { |
| 755 var webview = document.createElement('webview'); |
| 756 |
| 757 console.log("Step 1: call <webview>.addContentScripts."); |
| 758 webview.addContentScripts( |
| 759 [{"name": 'myrule', |
| 760 "matches": ["http://*/extensions/*"], |
| 761 "js": ["inject_comm_channel.js"], |
| 762 "run_at": "document_start"}]); |
| 763 |
| 764 webview.addEventListener('loadstop', function() { |
| 765 var msg = ['connect']; |
| 766 webview.contentWindow.postMessage(JSON.stringify(msg), '*'); |
| 767 }); |
| 768 |
| 769 window.addEventListener('message', function(e) { |
| 770 var data = JSON.parse(e.data); |
| 771 if (data == 'connected') { |
| 772 console.log( |
| 773 'Step 2: A communication channel has been established with webview.'); |
| 774 embedder.test.succeed(); |
| 775 return; |
| 776 } |
| 777 console.log('Unexpected message: \'' + data[0] + '\''); |
| 778 embedder.test.fail(); |
| 779 }); |
| 780 |
| 781 webview.src = embedder.emptyGuestURL; |
| 782 document.body.appendChild(webview); |
| 783 } |
| 784 |
| 785 function testAddMultipleContentScripts() { |
| 786 var webview = document.createElement('webview'); |
| 787 |
| 788 console.log("Step 1: call <webview>.addContentScripts(myrule1 & myrule2)"); |
| 789 webview.addContentScripts( |
| 790 [{"name": 'myrule1', |
| 791 "matches": ["http://*/extensions/*"], |
| 792 "js": ["inject_comm_channel.js"], |
| 793 "run_at": "document_start"}, |
| 794 {"name": 'myrule2', |
| 795 "matches": ["http://*/extensions/*"], |
| 796 "js": ["inject_comm_channel_2.js"], |
| 797 "run_at": "document_start"}]); |
| 798 |
| 799 webview.addEventListener('loadstop', function() { |
| 800 var msg1 = ['connect']; |
| 801 webview.contentWindow.postMessage(JSON.stringify(msg1), '*'); |
| 802 var msg2 = ['connect_request']; |
| 803 webview.contentWindow.postMessage(JSON.stringify(msg2), '*'); |
| 804 }); |
| 805 |
| 806 var response_1 = false; |
| 807 var response_2 = false; |
| 808 window.addEventListener('message', function(e) { |
| 809 var data = JSON.parse(e.data); |
| 810 if (data == 'connected') { |
| 811 console.log( |
| 812 'Step 2: A communication channel has been established with webview.'); |
| 813 response_1 = true; |
| 814 if (response_1 && response_2) |
| 815 embedder.test.succeed(); |
| 816 return; |
| 817 } else if (data == 'connected_response') { |
| 818 console.log( |
| 819 'Step 3: A communication channel has been established with webview.'); |
| 820 response_2 = true; |
| 821 if (response_1 && response_2) |
| 822 embedder.test.succeed(); |
| 823 return; |
| 824 } |
| 825 console.log('Unexpected message: \'' + data[0] + '\''); |
| 826 embedder.test.fail(); |
| 827 }); |
| 828 |
| 829 webview.src = embedder.emptyGuestURL; |
| 830 document.body.appendChild(webview); |
| 831 } |
| 832 |
| 833 function testAddContentScriptWithSameNameShouldOverwriteTheExistingOne() { |
| 834 var webview = document.createElement('webview'); |
| 835 |
| 836 console.log("Step 1: call <webview>.addContentScripts(myrule1)"); |
| 837 webview.addContentScripts( |
| 838 [{"name": 'myrule1', |
| 839 "matches": ["http://*/extensions/*"], |
| 840 "js": ["inject_comm_channel.js"], |
| 841 "run_at": "document_start"}]); |
| 842 var connect_script_1 = true; |
| 843 var connect_script_2 = false; |
| 844 |
| 845 webview.addEventListener('loadstop', function() { |
| 846 if (connect_script_1) { |
| 847 var msg1 = ['connect']; |
| 848 webview.contentWindow.postMessage(JSON.stringify(msg1), '*'); |
| 849 connect_script_1 = false; |
| 850 } |
| 851 if (connect_script_2) { |
| 852 var msg2 = ['connect_request']; |
| 853 webview.contentWindow.postMessage(JSON.stringify(msg2), '*'); |
| 854 connect_script_2 = false; |
| 855 } |
| 856 }); |
| 857 |
| 858 var should_get_response_from_script_1 = true; |
| 859 window.addEventListener('message', function(e) { |
| 860 var data = JSON.parse(e.data); |
| 861 if (data == 'connected') { |
| 862 if (should_get_response_from_script_1) { |
| 863 console.log( |
| 864 'Step 2: A communication channel has been established with webview.' |
| 865 ); |
| 866 webview.addContentScripts( |
| 867 [{"name": 'myrule1', |
| 868 "matches": ["http://*/extensions/*"], |
| 869 "js": ["inject_comm_channel_2.js"], |
| 870 "run_at": "document_start"}]); |
| 871 connect_script_2 = true; |
| 872 should_get_response_from_script_1 = false; |
| 873 webview.src = embedder.emptyGuestURL; |
| 874 } else { |
| 875 embedder.test.fail(); |
| 876 } |
| 877 return; |
| 878 } else if (data == 'connected_response') { |
| 879 console.log( |
| 880 'Step 3: Another communication channel has been established ' + |
| 881 'with webview.'); |
| 882 setTimeout(function() { |
| 883 embedder.test.succeed(); |
| 884 }, 1000); |
| 885 return; |
| 886 } |
| 887 console.log('Unexpected message: \'' + data[0] + '\''); |
| 888 embedder.test.fail(); |
| 889 }); |
| 890 |
| 891 webview.src = embedder.emptyGuestURL; |
| 892 document.body.appendChild(webview); |
| 893 } |
| 894 |
| 895 function testAddContentScriptToOneWebViewShouldNotInjectToTheOtherWebView() { |
| 896 var webview1 = document.createElement('webview'); |
| 897 var webview2 = document.createElement('webview'); |
| 898 |
| 899 console.log("Step 1: call <webview1>.addContentScripts."); |
| 900 webview1.addContentScripts( |
| 901 [{"name": 'myrule', |
| 902 "matches": ["http://*/extensions/*"], |
| 903 "js": ["inject_comm_channel.js"], |
| 904 "run_at": "document_start"}]); |
| 905 |
| 906 webview2.addEventListener('loadstop', function() { |
| 907 console.log("Step 2: webview2 requests to build communication channel."); |
| 908 var msg = ['connect']; |
| 909 webview2.contentWindow.postMessage(JSON.stringify(msg), '*'); |
| 910 setTimeout(function() { |
| 911 embedder.test.succeed(); |
| 912 }, 2000); |
| 913 }); |
| 914 |
| 915 window.addEventListener('message', function(e) { |
| 916 var data = JSON.parse(e.data); |
| 917 if (data == 'connected') { |
| 918 embedder.test.fail(); |
| 919 return; |
| 920 } |
| 921 console.log('Unexpected message: \'' + data[0] + '\''); |
| 922 embedder.test.fail(); |
| 923 }); |
| 924 |
| 925 webview1.src = embedder.emptyGuestURL; |
| 926 webview2.src = embedder.emptyGuestURL; |
| 927 document.body.appendChild(webview1); |
| 928 document.body.appendChild(webview2); |
| 929 } |
| 930 |
| 931 function testAddAndRemoveContentScripts() { |
| 932 var webview = document.createElement('webview'); |
| 933 |
| 934 console.log("Step 1: call <webview>.addContentScripts."); |
| 935 webview.addContentScripts( |
| 936 [{"name": 'myrule', |
| 937 "matches": ["http://*/extensions/*"], |
| 938 "js": ["inject_comm_channel.js"], |
| 939 "run_at": "document_start"}]); |
| 940 |
| 941 var count = 0; |
| 942 webview.addEventListener('loadstop', function() { |
| 943 if (count == 0) { |
| 944 console.log('Step 2: post message to build connect.'); |
| 945 var msg = ['connect']; |
| 946 webview.contentWindow.postMessage(JSON.stringify(msg), '*'); |
| 947 count++; |
| 948 } else if (count == 1) { |
| 949 console.log( |
| 950 'Step 4: call <webview>.removeContentScripts and navigate.'); |
| 951 webview.removeContentScripts(); |
| 952 webview.src = embedder.emptyGuestURL; |
| 953 count++; |
| 954 } else if (count == 2) { |
| 955 console.log('Step 5: post message to build connect again.'); |
| 956 var msg = ['connect']; |
| 957 webview.contentWindow.postMessage(JSON.stringify(msg), '*'); |
| 958 setTimeout(function() { |
| 959 embedder.test.succeed(); |
| 960 }, 2000); |
| 961 } |
| 962 }); |
| 963 |
| 964 var replyCount = 0; |
| 965 window.addEventListener('message', function(e) { |
| 966 var data = JSON.parse(e.data); |
| 967 if (data[0] == 'connected') { |
| 968 console.log( |
| 969 'Step 3: A communication channel has been established with webview.'); |
| 970 if (replyCount == 0) { |
| 971 webview.setAttribute('src', 'about:blank'); |
| 972 replyCount++; |
| 973 return; |
| 974 } else if (replyCount == 1) { |
| 975 embedder.test.fail(); |
| 976 return; |
| 977 } |
| 978 } |
| 979 console.log('Unexpected message: \'' + data[0] + '\''); |
| 980 embedder.test.fail(); |
| 981 }); |
| 982 |
| 983 webview.src = embedder.emptyGuestURL; |
| 984 document.body.appendChild(webview); |
| 985 } |
| 986 |
| 987 function testAddContentScriptsWithNewWindowAPI() { |
| 988 var webview = document.createElement('webview'); |
| 989 |
| 990 var newwebview; |
| 991 webview.addEventListener('newwindow', function(e) { |
| 992 e.preventDefault(); |
| 993 newwebview = document.createElement('webview'); |
| 994 |
| 995 console.log('Step 2: call newwebview.addContentScripts.'); |
| 996 newwebview.addContentScripts( |
| 997 [{"name": 'myrule', |
| 998 "matches": ["http://*/extensions/*"], |
| 999 "js": ["inject_comm_channel.js"], |
| 1000 "run_at": "document_start"}]); |
| 1001 |
| 1002 newwebview.addEventListener('loadstop', function(evt) { |
| 1003 var msg = ['connect']; |
| 1004 console.log('Step 4: new webview postmessage to build communication ' + |
| 1005 'channel.'); |
| 1006 newwebview.contentWindow.postMessage(JSON.stringify(msg), '*'); |
| 1007 }); |
| 1008 |
| 1009 document.body.appendChild(newwebview); |
| 1010 // attach the new window to the new <webview>. |
| 1011 console.log("Step 3: attaches the new webview."); |
| 1012 e.window.attach(newwebview); |
| 1013 }); |
| 1014 |
| 1015 window.addEventListener('message', function(e) { |
| 1016 var data = JSON.parse(e.data); |
| 1017 if (data == 'connected' && e.source == newwebview.contentWindow) { |
| 1018 console.log('Step 5: a communication channel has been established ' + |
| 1019 'with the new webview.'); |
| 1020 embedder.test.succeed(); |
| 1021 return; |
| 1022 } else { |
| 1023 embedder.test.fail(); |
| 1024 return; |
| 1025 } |
| 1026 console.log('unexpected message: \'' + data[0] + '\''); |
| 1027 embedder.test.fail(); |
| 1028 }); |
| 1029 |
| 1030 console.log('Step 1: navigates the webview to window open guest URL.'); |
| 1031 webview.setAttribute('src', embedder.windowOpenGuestFromSameURL); |
| 1032 document.body.appendChild(webview); |
| 1033 } |
| 1034 |
| 1035 function testContentScriptIsInjectedAfterTerminateAndReloadWebView() { |
| 1036 var webview = document.createElement('webview'); |
| 1037 |
| 1038 console.log('Step 1: call <webview>.addContentScripts.'); |
| 1039 webview.addContentScripts( |
| 1040 [{"name": 'myrule', |
| 1041 "matches": ["http://*/extensions/*"], |
| 1042 "js": ["inject_comm_channel.js"], |
| 1043 "run_at": "document_start"}]); |
| 1044 |
| 1045 var count = 0; |
| 1046 webview.addEventListener('loadstop', function() { |
| 1047 if (count == 0) { |
| 1048 console.log('Step 2: call webview.terminate().'); |
| 1049 webview.terminate(); |
| 1050 ++count; |
| 1051 return; |
| 1052 } else if (count == 1) { |
| 1053 console.log('Step 4: postMessage to build communication.'); |
| 1054 var msg = ['connect']; |
| 1055 webview.contentWindow.postMessage(JSON.stringify(msg), '*'); |
| 1056 ++count; |
| 1057 } |
| 1058 }); |
| 1059 |
| 1060 webview.addEventListener('exit', function() { |
| 1061 console.log('Step 3: call webview.reload().'); |
| 1062 webview.reload(); |
| 1063 }); |
| 1064 |
| 1065 window.addEventListener('message', function(e) { |
| 1066 var data = JSON.parse(e.data); |
| 1067 if (data == 'connected') { |
| 1068 console.log( |
| 1069 'Step 5: A communication channel has been established with webview.'); |
| 1070 embedder.test.succeed(); |
| 1071 return; |
| 1072 } |
| 1073 console.log('Unexpected message: \'' + data[0] + '\''); |
| 1074 embedder.test.fail(); |
| 1075 }); |
| 1076 |
| 1077 webview.src = embedder.emptyGuestURL; |
| 1078 document.body.appendChild(webview); |
| 1079 } |
| 1080 |
752 function testExecuteScriptFail() { | 1081 function testExecuteScriptFail() { |
753 var webview = document.createElement('webview'); | 1082 var webview = document.createElement('webview'); |
754 document.body.appendChild(webview); | 1083 document.body.appendChild(webview); |
755 setTimeout(function() { | 1084 setTimeout(function() { |
756 webview.executeScript( | 1085 webview.executeScript( |
757 {code:'document.body.style.backgroundColor = "red";'}, | 1086 {code:'document.body.style.backgroundColor = "red";'}, |
758 function(results) { | 1087 function(results) { |
759 embedder.test.fail(); | 1088 embedder.test.fail(); |
760 }); | 1089 }); |
761 setTimeout(function() { | 1090 setTimeout(function() { |
(...skipping 1453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2215 'testInvalidChromeExtensionURL': testInvalidChromeExtensionURL, | 2544 'testInvalidChromeExtensionURL': testInvalidChromeExtensionURL, |
2216 'testWebRequestAPIExistence': testWebRequestAPIExistence, | 2545 'testWebRequestAPIExistence': testWebRequestAPIExistence, |
2217 'testEventName': testEventName, | 2546 'testEventName': testEventName, |
2218 'testOnEventProperties': testOnEventProperties, | 2547 'testOnEventProperties': testOnEventProperties, |
2219 'testLoadProgressEvent': testLoadProgressEvent, | 2548 'testLoadProgressEvent': testLoadProgressEvent, |
2220 'testDestroyOnEventListener': testDestroyOnEventListener, | 2549 'testDestroyOnEventListener': testDestroyOnEventListener, |
2221 'testCannotMutateEventName': testCannotMutateEventName, | 2550 'testCannotMutateEventName': testCannotMutateEventName, |
2222 'testPartitionChangeAfterNavigation': testPartitionChangeAfterNavigation, | 2551 'testPartitionChangeAfterNavigation': testPartitionChangeAfterNavigation, |
2223 'testPartitionRemovalAfterNavigationFails': | 2552 'testPartitionRemovalAfterNavigationFails': |
2224 testPartitionRemovalAfterNavigationFails, | 2553 testPartitionRemovalAfterNavigationFails, |
| 2554 'testAddContentScript': testAddContentScript, |
| 2555 'testAddMultipleContentScripts': testAddMultipleContentScripts, |
| 2556 'testAddContentScriptWithSameNameShouldOverwriteTheExistingOne': |
| 2557 testAddContentScriptWithSameNameShouldOverwriteTheExistingOne, |
| 2558 'testAddContentScriptToOneWebViewShouldNotInjectToTheOtherWebView': |
| 2559 testAddContentScriptToOneWebViewShouldNotInjectToTheOtherWebView, |
| 2560 'testAddAndRemoveContentScripts': testAddAndRemoveContentScripts, |
| 2561 'testAddContentScriptsWithNewWindowAPI': |
| 2562 testAddContentScriptsWithNewWindowAPI, |
| 2563 'testContentScriptIsInjectedAfterTerminateAndReloadWebView': |
| 2564 testContentScriptIsInjectedAfterTerminateAndReloadWebView, |
2225 'testExecuteScriptFail': testExecuteScriptFail, | 2565 'testExecuteScriptFail': testExecuteScriptFail, |
2226 'testExecuteScript': testExecuteScript, | 2566 'testExecuteScript': testExecuteScript, |
2227 'testExecuteScriptIsAbortedWhenWebViewSourceIsChanged': | 2567 'testExecuteScriptIsAbortedWhenWebViewSourceIsChanged': |
2228 testExecuteScriptIsAbortedWhenWebViewSourceIsChanged, | 2568 testExecuteScriptIsAbortedWhenWebViewSourceIsChanged, |
2229 'testTerminateAfterExit': testTerminateAfterExit, | 2569 'testTerminateAfterExit': testTerminateAfterExit, |
2230 'testAssignSrcAfterCrash': testAssignSrcAfterCrash, | 2570 'testAssignSrcAfterCrash': testAssignSrcAfterCrash, |
2231 'testNavOnConsecutiveSrcAttributeChanges': | 2571 'testNavOnConsecutiveSrcAttributeChanges': |
2232 testNavOnConsecutiveSrcAttributeChanges, | 2572 testNavOnConsecutiveSrcAttributeChanges, |
2233 'testNavOnSrcAttributeChange': testNavOnSrcAttributeChange, | 2573 'testNavOnSrcAttributeChange': testNavOnSrcAttributeChange, |
2234 'testReassignSrcAttribute': testReassignSrcAttribute, | 2574 'testReassignSrcAttribute': testReassignSrcAttribute, |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2281 'testPerViewZoomMode': testPerViewZoomMode, | 2621 'testPerViewZoomMode': testPerViewZoomMode, |
2282 'testDisabledZoomMode': testDisabledZoomMode, | 2622 'testDisabledZoomMode': testDisabledZoomMode, |
2283 }; | 2623 }; |
2284 | 2624 |
2285 onload = function() { | 2625 onload = function() { |
2286 chrome.test.getConfig(function(config) { | 2626 chrome.test.getConfig(function(config) { |
2287 embedder.setUp_(config); | 2627 embedder.setUp_(config); |
2288 chrome.test.sendMessage("Launched"); | 2628 chrome.test.sendMessage("Launched"); |
2289 }); | 2629 }); |
2290 }; | 2630 }; |
OLD | NEW |