Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(261)

Side by Side Diff: chrome/test/data/extensions/platform_apps/web_view/main.js

Issue 12051090: Move all <webview> tests to web_view directory (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merged with ToT Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 var util = {};
6
7 // Creates a <webview> tag in document.body and returns the reference to it.
8 // It also sets a dummy src. The dummy src is significant because this makes
9 // sure that the <object> shim is created (asynchronously at this point) for the
10 // <webview> tag. This makes the <webview> tag ready for add/removeEventListener
11 // calls.
12 util.createWebViewTagInDOM = function() {
13 var webview = document.createElement('webview');
14 webview.style.width = '300px';
15 webview.style.height = '200px';
16 document.body.appendChild(webview);
17 var urlDummy = 'data:text/html,<body>Initial dummy guest</body>';
18 webview.setAttribute('src', urlDummy);
19 return webview;
20 };
21
22 onload = function() {
23 chrome.test.runTests([
24 function webView() {
25 var webview = document.querySelector('webview');
26 // Since we can't currently inspect the page loaded inside the <webview>,
27 // the only way we can check that the shim is working is by changing the
28 // size and seeing if the shim updates the size of the DOM.
29 chrome.test.assertEq(300, webview.offsetWidth);
30 chrome.test.assertEq(200, webview.offsetHeight);
31
32 webview.style.width = '310px';
33 webview.style.height = '210px';
34
35 chrome.test.assertEq(310, webview.offsetWidth);
36 chrome.test.assertEq(210, webview.offsetHeight);
37
38 webview.style.width = '320px';
39 webview.style.height = '220px';
40
41 chrome.test.assertEq(320, webview.offsetWidth);
42 chrome.test.assertEq(220, webview.offsetHeight);
43
44 var dynamicWebViewTag = document.createElement('webview');
45 dynamicWebViewTag.setAttribute('src', 'data:text/html,dynamic browser');
46 dynamicWebViewTag.style.width = '330px';
47 dynamicWebViewTag.style.height = '230px';
48 document.body.appendChild(dynamicWebViewTag);
49
50 // Timeout is necessary to give the mutation observers a chance to fire.
51 setTimeout(function() {
52 chrome.test.assertEq(330, dynamicWebViewTag.offsetWidth);
53 chrome.test.assertEq(230, dynamicWebViewTag.offsetHeight);
54
55 chrome.test.succeed();
56 }, 0);
57 },
58
59 function webViewApiMethodExistence() {
60 var apiMethodsToCheck = [
61 'back',
62 'canGoBack',
63 'canGoForward',
64 'forward',
65 'getProcessId',
66 'go',
67 'reload',
68 'stop',
69 'terminate'
70 ];
71 var webview = document.createElement('webview');
72 webview.addEventListener('loadstop', function(e) {
73 for (var i = 0; i < apiMethodsToCheck.length; ++i) {
74 chrome.test.assertEq('function',
75 typeof webview[apiMethodsToCheck[i]]);
76 }
77
78 // Check contentWindow.
79 chrome.test.assertEq('object', typeof webview.contentWindow);
80 chrome.test.assertEq('function',
81 typeof webview.contentWindow.postMessage);
82
83 chrome.test.succeed();
84 });
85 webview.setAttribute('src', 'data:text/html,webview check api');
86 document.body.appendChild(webview);
87 },
88
89 function webViewEventName() {
90 var webview = document.createElement('webview');
91 webview.setAttribute('src', 'data:text/html,webview check api');
92 document.body.appendChild(webview);
93
94 webview.addEventListener('loadstart', function(evt) {
95 chrome.test.assertEq('loadstart', evt.type);
96 });
97
98 webview.addEventListener('loadstop', function(evt) {
99 chrome.test.assertEq('loadstop', evt.type);
100 webview.terminate();
101 });
102
103 webview.addEventListener('exit', function(evt) {
104 chrome.test.assertEq('exit', evt.type);
105 chrome.test.succeed();
106 });
107
108 webview.setAttribute('src', 'data:text/html,trigger navigation');
109 },
110
111 // This test registers two listeners on an event (loadcommit) and removes
112 // the <webview> tag when the first listener fires.
113 // Current expected behavior is that the second event listener will still
114 // fire without crashing.
115 function webviewDestroyOnEventListener() {
116 var webview = util.createWebViewTagInDOM();
117 var url = 'data:text/html,<body>Destroy test</body>';
118
119 var loadCommitCount = 0;
120 function loadCommitCommon(e) {
121 chrome.test.assertEq('loadcommit', e.type);
122 if (url != e.url)
123 return;
124 ++loadCommitCount;
125 if (loadCommitCount == 1) {
126 webview.parentNode.removeChild(webview);
127 webview = null;
128 setTimeout(function() {
129 chrome.test.succeed();
130 }, 0);
131 } else if (loadCommitCount > 2) {
132 chrome.test.fail();
133 }
134 };
135
136 // The test starts from here, by setting the src to |url|.
137 webview.addEventListener('loadcommit', function(e) {
138 loadCommitCommon(e);
139 });
140 webview.addEventListener('loadcommit', function(e) {
141 loadCommitCommon(e);
142 });
143 webview.setAttribute('src', url);
144 },
145
146 // This test registers two event listeners on a same event (loadcommit).
147 // Each of the listener tries to change some properties on the event param,
148 // which should not be possible.
149 function cannotMutateEventName() {
150 var webview = util.createWebViewTagInDOM();
151 var url = 'data:text/html,<body>Two</body>';
152
153 var loadCommitACalled = false;
154 var loadCommitBCalled = false;
155
156 var maybeFinishTest = function(e) {
157 if (loadCommitACalled && loadCommitBCalled) {
158 chrome.test.assertEq('loadcommit', e.type);
159 chrome.test.succeed();
160 }
161 };
162
163 var onLoadCommitA = function(e) {
164 if (e.url == url) {
165 chrome.test.assertEq('loadcommit', e.type);
166 chrome.test.assertTrue(e.isTopLevel);
167 chrome.test.assertFalse(loadCommitACalled);
168 loadCommitACalled = true;
169 // Try mucking with properities inside |e|.
170 e.type = 'modified';
171 maybeFinishTest(e);
172 }
173 };
174 var onLoadCommitB = function(e) {
175 if (e.url == url) {
176 chrome.test.assertEq('loadcommit', e.type);
177 chrome.test.assertTrue(e.isTopLevel);
178 chrome.test.assertFalse(loadCommitBCalled);
179 loadCommitBCalled = true;
180 // Try mucking with properities inside |e|.
181 e.type = 'modified';
182 maybeFinishTest(e);
183 }
184 };
185
186 // The test starts from here, by setting the src to |url|. Event
187 // listener registration works because we already have a (dummy) src set
188 // on the <webview> tag.
189 webview.addEventListener('loadcommit', onLoadCommitA);
190 webview.addEventListener('loadcommit', onLoadCommitB);
191 webview.setAttribute('src', url);
192 },
193
194 // This test verifies that setting the partition attribute after the src has
195 // been set raises an exception.
196 function partitionRaisesException() {
197 var webview = document.createElement('webview');
198 webview.setAttribute('src', 'data:text/html,trigger navigation');
199 document.body.appendChild(webview);
200 setTimeout(function() {
201 try {
202 webview.partition = 'illegal';
203 chrome.test.fail();
204 } catch (e) {
205 chrome.test.succeed();
206 }
207 }, 0);
208 },
209
210 function webViewExecuteScript() {
211 var webview = document.createElement('webview');
212 webview.addEventListener('loadstop', function() {
213 webview.executeScript(
214 {code:'document.body.style.backgroundColor = "red";'},
215 function(results) {
216 chrome.test.assertEq(1, results.length);
217 chrome.test.assertEq('red', results[0]);
218 chrome.test.succeed();
219 });
220 });
221 webview.setAttribute('src', 'data:text/html,trigger navigation');
222 document.body.appendChild(webview);
223 }
224 ]);
225 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698