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 |