| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 embedder = {}; | 5 var embedder = {}; |
| 6 embedder.tests = {}; | 6 embedder.tests = {}; |
| 7 embedder.baseGuestURL = ''; | 7 embedder.baseGuestURL = ''; |
| 8 embedder.guestURL = ''; | 8 embedder.guestURL = ''; |
| 9 | 9 |
| 10 embedder.setUp = function(config) { | 10 embedder.setUp = function(config) { |
| 11 embedder.baseGuestURL = 'http://localhost:' + config.testServer.port; | 11 embedder.baseGuestURL = 'http://localhost:' + config.testServer.port; |
| 12 embedder.guestURL = embedder.baseGuestURL + | 12 embedder.guestURL = embedder.baseGuestURL + |
| 13 '/files/extensions/platform_apps/web_view/newwindow' + | 13 '/files/extensions/platform_apps/web_view/newwindow' + |
| 14 '/guest.html'; | 14 '/guest.html'; |
| 15 chrome.test.log('Guest url is: ' + embedder.guestURL); | 15 chrome.test.log('Guest url is: ' + embedder.guestURL); |
| 16 }; | 16 }; |
| 17 | 17 |
| 18 /** @private */ | 18 /** @private */ |
| 19 embedder.setUpGuest_ = function() { | 19 embedder.setUpGuest_ = function(partitionName) { |
| 20 document.querySelector('#webview-tag-container').innerHTML = | 20 document.querySelector('#webview-tag-container').innerHTML = |
| 21 '<webview style="width: 100px; height: 100px;"' + | 21 '<webview style="width: 100px; height: 100px;"' + |
| 22 ' src="' + embedder.guestURL + '"' + | 22 ' src="' + embedder.guestURL + '"' + |
| 23 '></webview>'; | 23 '></webview>'; |
| 24 var webview = document.querySelector('webview'); | 24 var webview = document.querySelector('webview'); |
| 25 if (partitionName) { |
| 26 webview.partition = partitionName; |
| 27 } |
| 25 if (!webview) { | 28 if (!webview) { |
| 26 chrome.test.fail('No <webview> element created'); | 29 chrome.test.fail('No <webview> element created'); |
| 27 } | 30 } |
| 28 return webview; | 31 return webview; |
| 29 }; | 32 }; |
| 30 | 33 |
| 31 /** @private */ | 34 /** @private */ |
| 32 embedder.setUpNewWindowRequest_ = function(webview, url, frameName) { | 35 embedder.setUpNewWindowRequest_ = function(webview, url, frameName) { |
| 33 var onWebViewLoadStop = function(e) { | 36 var onWebViewLoadStop = function(e) { |
| 34 // Send post message to <webview> when it's ready to receive them. | 37 // Send post message to <webview> when it's ready to receive them. |
| 35 webview.contentWindow.postMessage( | 38 webview.contentWindow.postMessage( |
| 36 JSON.stringify(['open-window', '' + url, '' + frameName]), '*'); | 39 JSON.stringify(['open-window', '' + url, '' + frameName]), '*'); |
| 37 }; | 40 }; |
| 38 webview.addEventListener('loadstop', onWebViewLoadStop); | 41 webview.addEventListener('loadstop', onWebViewLoadStop); |
| 39 }; | 42 }; |
| 40 | 43 |
| 41 embedder.setUpFrameNameRequest_ = function(webview, testName) { | 44 embedder.setUpFrameNameRequest_ = function(webview, testName) { |
| 42 var onWebViewLoadStop = function(e) { | 45 var onWebViewLoadStop = function(e) { |
| 43 // Send post message to <webview> when it's ready to receive them. | 46 // Send post message to <webview> when it's ready to receive them. |
| 44 webview.contentWindow.postMessage( | 47 webview.contentWindow.postMessage( |
| 45 JSON.stringify(['get-frame-name', testName]), '*'); | 48 JSON.stringify(['get-frame-name', testName]), '*'); |
| 46 }; | 49 }; |
| 47 webview.addEventListener('loadstop', onWebViewLoadStop); | 50 webview.addEventListener('loadstop', onWebViewLoadStop); |
| 48 }; | 51 }; |
| 49 | 52 |
| 50 /** @private */ | 53 /** @private */ |
| 51 embedder.requestFrameName_ = function(webview, testName, expectedFrameName) { | 54 embedder.requestFrameName_ = |
| 55 function(webview, openerwebview, testName, expectedFrameName) { |
| 52 var onPostMessageReceived = function(e) { | 56 var onPostMessageReceived = function(e) { |
| 53 var data = JSON.parse(e.data); | 57 var data = JSON.parse(e.data); |
| 54 if (data[0] == 'get-frame-name') { | 58 if (data[0] == 'get-frame-name') { |
| 55 var name = data[1]; | 59 var name = data[1]; |
| 56 if (testName != name) | 60 if (testName != name) |
| 57 return; | 61 return; |
| 58 var frameName = data[2]; | 62 var frameName = data[2]; |
| 59 chrome.test.assertEq(expectedFrameName, frameName); | 63 chrome.test.assertEq(expectedFrameName, frameName); |
| 60 chrome.test.assertEq(expectedFrameName, webview.name); | 64 chrome.test.assertEq(expectedFrameName, webview.name); |
| 65 chrome.test.assertEq(openerwebview.partition, webview.partition); |
| 61 chrome.test.succeed(); | 66 chrome.test.succeed(); |
| 62 } | 67 } |
| 63 }; | 68 }; |
| 64 window.addEventListener('message', onPostMessageReceived); | 69 window.addEventListener('message', onPostMessageReceived); |
| 65 }; | 70 }; |
| 66 | 71 |
| 67 /** @private */ | 72 /** @private */ |
| 68 embedder.assertCorrectEvent_ = function(e) { | 73 embedder.assertCorrectEvent_ = function(e) { |
| 69 chrome.test.assertEq('newwindow', e.type); | 74 chrome.test.assertEq('newwindow', e.type); |
| 70 chrome.test.assertTrue(!!e.targetUrl); | 75 chrome.test.assertTrue(!!e.targetUrl); |
| 71 chrome.test.assertTrue(e.targetUrl.indexOf(embedder.baseGuestURL) == 0); | 76 chrome.test.assertTrue(e.targetUrl.indexOf(embedder.baseGuestURL) == 0); |
| 72 }; | 77 }; |
| 73 | 78 |
| 74 // Tests begin. | 79 // Tests begin. |
| 75 | 80 |
| 76 // The embedder has to initiate a post message so that the guest can get a | 81 // The embedder has to initiate a post message so that the guest can get a |
| 77 // reference to embedder to send the reply back. | 82 // reference to embedder to send the reply back. |
| 78 | 83 |
| 79 var testNewWindow = | 84 var testNewWindow = function(testName, |
| 80 function(testName, webViewName, guestName, expectedFrameName) { | 85 webViewName, |
| 81 var webview = embedder.setUpGuest_(); | 86 guestName, |
| 87 partitionName, |
| 88 expectedFrameName) { |
| 89 var webview = embedder.setUpGuest_(partitionName); |
| 82 | 90 |
| 83 var onNewWindow = function(e) { | 91 var onNewWindow = function(e) { |
| 84 chrome.test.log('Embedder notified on newwindow'); | 92 chrome.test.log('Embedder notified on newwindow'); |
| 85 embedder.assertCorrectEvent_(e); | 93 embedder.assertCorrectEvent_(e); |
| 86 var width = e.initialWidth || 640; | 94 var width = e.initialWidth || 640; |
| 87 var height = e.initialHeight || 480; | 95 var height = e.initialHeight || 480; |
| 88 e.preventDefault(); | 96 e.preventDefault(); |
| 89 chrome.app.window.create('newwindow_embedder.html', { | 97 chrome.app.window.create('newwindow_embedder.html', { |
| 90 top: 0, | 98 top: 0, |
| 91 left: 0, | 99 left: 0, |
| 92 width: width, | 100 width: width, |
| 93 height: height, | 101 height: height, |
| 94 }, function(newwindow) { | 102 }, function(newwindow) { |
| 95 newwindow.contentWindow.onload = function(evt) { | 103 newwindow.contentWindow.onload = function(evt) { |
| 96 var w = newwindow.contentWindow; | 104 var w = newwindow.contentWindow; |
| 97 var newwebview = w.document.querySelector('webview'); | 105 var newwebview = w.document.querySelector('webview'); |
| 98 newwebview.name = webViewName; | 106 newwebview.name = webViewName; |
| 99 embedder.setUpFrameNameRequest_(newwebview, testName); | 107 embedder.setUpFrameNameRequest_(newwebview, testName); |
| 100 embedder.requestFrameName_(newwebview, testName, expectedFrameName); | 108 embedder.requestFrameName_( |
| 109 newwebview, webview, testName, expectedFrameName); |
| 101 try { | 110 try { |
| 102 e.window.attach(newwebview); | 111 e.window.attach(newwebview); |
| 103 } catch (e) { | 112 } catch (e) { |
| 104 chrome.test.fail(); | 113 chrome.test.fail(); |
| 105 } | 114 } |
| 106 } | 115 } |
| 107 }); | 116 }); |
| 108 }; | 117 }; |
| 109 webview.addEventListener('newwindow', onNewWindow); | 118 webview.addEventListener('newwindow', onNewWindow); |
| 110 | 119 |
| 111 // Load a new window with the given name. | 120 // Load a new window with the given name. |
| 112 embedder.setUpNewWindowRequest_(webview, 'guest.html', guestName); | 121 embedder.setUpNewWindowRequest_(webview, 'guest.html', guestName); |
| 113 }; | 122 }; |
| 114 | 123 |
| 115 // Loads a guest which requests a new window. | 124 // Loads a guest which requests a new window. |
| 116 embedder.tests.testNewWindowNameTakesPrecedence = | 125 embedder.tests.testNewWindowNameTakesPrecedence = |
| 117 function testNewWindowNameTakesPrecedence() { | 126 function testNewWindowNameTakesPrecedence() { |
| 118 var webViewName = 'foo'; | 127 var webViewName = 'foo'; |
| 119 var guestName = 'bar'; | 128 var guestName = 'bar'; |
| 129 var partitionName = 'foobar'; |
| 120 var expectedName = guestName; | 130 var expectedName = guestName; |
| 121 testNewWindow('testNewWindowNameTakesPrecedence', | 131 testNewWindow('testNewWindowNameTakesPrecedence', |
| 122 webViewName, guestName, expectedName); | 132 webViewName, guestName, partitionName, expectedName); |
| 123 }; | 133 }; |
| 124 | 134 |
| 125 embedder.tests.testWebViewNameTakesPrecedence = | 135 embedder.tests.testWebViewNameTakesPrecedence = |
| 126 function testWebViewNameTakesPrecedence() { | 136 function testWebViewNameTakesPrecedence() { |
| 127 var webViewName = 'foo'; | 137 var webViewName = 'foo'; |
| 128 var guestName = ''; | 138 var guestName = ''; |
| 139 var partitionName = 'persist:foobar'; |
| 129 var expectedName = webViewName; | 140 var expectedName = webViewName; |
| 130 testNewWindow('testWebViewNameTakesPrecedence', | 141 testNewWindow('testWebViewNameTakesPrecedence', |
| 131 webViewName, guestName, expectedName); | 142 webViewName, guestName, partitionName, expectedName); |
| 132 }; | 143 }; |
| 133 | 144 |
| 134 embedder.tests.testNoName = function testNoName() { | 145 embedder.tests.testNoName = function testNoName() { |
| 135 var webViewName = ''; | 146 var webViewName = ''; |
| 136 var guestName = ''; | 147 var guestName = ''; |
| 148 var partitionName = ''; |
| 137 var expectedName = ''; | 149 var expectedName = ''; |
| 138 testNewWindow('testNoName', webViewName, guestName, expectedName); | 150 testNewWindow('testNoName', |
| 151 webViewName, guestName, partitionName, expectedName); |
| 139 }; | 152 }; |
| 140 | 153 |
| 141 onload = function() { | 154 onload = function() { |
| 142 chrome.test.getConfig(function(config) { | 155 chrome.test.getConfig(function(config) { |
| 143 embedder.setUp(config); | 156 embedder.setUp(config); |
| 144 chrome.test.runTests([ | 157 chrome.test.runTests([ |
| 145 embedder.tests.testNewWindowNameTakesPrecedence, | 158 embedder.tests.testNewWindowNameTakesPrecedence, |
| 146 embedder.tests.testWebViewNameTakesPrecedence, | 159 embedder.tests.testWebViewNameTakesPrecedence, |
| 147 embedder.tests.testNoName | 160 embedder.tests.testNoName |
| 148 ]); | 161 ]); |
| 149 }); | 162 }); |
| 150 }; | 163 }; |
| OLD | NEW |