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

Side by Side Diff: chrome/test/data/webui/webview_execute_script_test.js

Issue 1058113002: Implement <webview>.addContentScript/removeContentScript API [3] (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@webui_api_1
Patch Set: nits Created 5 years, 8 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
OLDNEW
(Empty)
1 // Copyright 2015 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 function createWebview() {
6 var webview = document.createElement('webview');
7 document.body.appendChild(webview);
8 return webview;
9 }
10
11 function onGetBackgroundExecuted(results) {
12 chrome.send('testResult', [results.length == 1 && results[0] == 'red']);
13 };
14
15 function testExecuteScriptCode(url) {
16 var webview = createWebview();
17
18 var onSetBackgroundExecuted = function() {
19 webview.executeScript({
20 code: 'document.body.style.backgroundColor;'
21 }, onGetBackgroundExecuted);
22 };
23
24 var onLoadStop = function() {
25 webview.executeScript({
26 code: 'document.body.style.backgroundColor = \'red\';'
27 }, onSetBackgroundExecuted);
28 };
29
30 webview.addEventListener('loadstop', onLoadStop);
31 webview.src = url;
32 }
33
34 function testExecuteScriptCodeFromFile(url) {
35 var webview = createWebview();
36
37 var onSetBackgroundExecuted = function() {
38 webview.executeScript({
39 code: 'document.body.style.backgroundColor;'
40 }, onGetBackgroundExecuted);
41 };
42
43 var onLoadStop = function() {
44 webview.executeScript({
45 file: 'test/webview_execute_script.js'
46 }, onSetBackgroundExecuted);
47 };
48
49 webview.addEventListener('loadstop', onLoadStop);
50 webview.src = url;
51 }
52
53 function testAddContentScript(url) {
54 var webview = document.createElement('webview');
55
56 console.log("Step 1: call <webview>.addContentScripts.");
57 webview.addContentScripts(
58 [{"name": 'myrule',
59 "matches": ["http://*/empty*"],
60 "js": ["test/inject_comm_channel.js", "test/inject_comm_channel_2.js"],
61 "run_at": "document_start"}]);
62
63 webview.addEventListener('loadstop', function() {
64 console.log("Step 2: postMessage to build connection.");
65 var msg = ['connect'];
66 webview.contentWindow.postMessage(JSON.stringify(msg), '*');
67 });
68
69 window.addEventListener('message', function(e) {
70 var data = JSON.parse(e.data);
71 if (data == 'connected') {
72 console.log(
73 'Step 3: A communication channel has been established with webview.');
74 chrome.send('testResult', [true]);
75 return;
76 }
77 console.log('Unexpected message: \'' + data[0] + '\'');
78 chrome.send('testResult', [false]);
79 });
80
81 webview.src = url;
82 document.body.appendChild(webview);
83 }
84
85 function testAddMultiContentScripts(url) {
86 var webview = document.createElement('webview');
87
88 console.log("Step 1: call <webview>.addContentScripts(myrule1 & myrule2)");
89 webview.addContentScripts(
90 [{"name": 'myrule1',
91 "matches": ["http://*/empty*"],
92 "js": ["test/inject_comm_channel.js"],
93 "run_at": "document_start"},
94 {"name": 'myrule2',
95 "matches": ["http://*/empty*"],
96 "js": ["test/inject_comm_channel_2.js"],
97 "run_at": "document_start"}]);
98
99 webview.addEventListener('loadstop', function() {
100 console.log("Step 2: postMessage to build connection.");
101 var msg1 = ['connect'];
102 webview.contentWindow.postMessage(JSON.stringify(msg1), '*');
103 console.log("Step 3: postMessage to build connection to the other script.");
104 var msg2 = ['connect_request'];
105 webview.contentWindow.postMessage(JSON.stringify(msg2), '*');
106 });
107
108 var response_1 = false;
109 var response_2 = false;
110 window.addEventListener('message', function(e) {
111 var data = JSON.parse(e.data);
112 if (data == 'connected') {
113 console.log(
114 'Step 4: A communication channel has been established with webview.');
115 response_1 = true;
116 if (response_1 && response_2)
117 chrome.send('testResult', [true]);
118 return;
119 } else if (data == 'connected_response') {
120 console.log(
121 'Step 5: A communication channel has been established with webview.');
122 response_2 = true;
123 if (response_1 && response_2)
124 chrome.send('testResult', [true]);
125 return;
126 }
127 console.log('!!!!!Unexpected message: \'' + data[0] + '\'');
128 chrome.send('testResult', [false]);
129 });
130
131 webview.src = url;
132 document.body.appendChild(webview);
133 }
134
135 function testAddContentScriptWithSameNameShouldOverwriteTheExistingOne(url) {
136 var webview = document.createElement('webview');
137
138 console.log("Step 1: call <webview>.addContentScripts(myrule1)");
139 webview.addContentScripts(
140 [{"name": 'myrule1',
141 "matches": ["http://*/empty*"],
142 "js": ["test/inject_comm_channel.js"],
143 "run_at": "document_start"}]);
144 var connect_script_1 = true;
145 var connect_script_2 = false;
146
147 webview.addEventListener('loadstop', function() {
148 if (connect_script_1) {
149 var msg1 = ['connect'];
150 webview.contentWindow.postMessage(JSON.stringify(msg1), '*');
151 connect_script_1 = false;
152 }
153 if (connect_script_2) {
154 var msg2 = ['connect_request'];
155 webview.contentWindow.postMessage(JSON.stringify(msg2), '*');
156 connect_script_2 = false;
157 }
158 });
159
160 var should_get_response_from_script_1 = true;
161 window.addEventListener('message', function(e) {
162 var data = JSON.parse(e.data);
163 if (data == 'connected') {
164 if (should_get_response_from_script_1) {
165 console.log(
166 'Step 2: A communication channel has been established with webview.'
167 );
168 webview.addContentScripts(
169 [{"name": 'myrule1',
170 "matches": ["http://*/empty*"],
171 "js": ["test/inject_comm_channel_2.js"],
172 "run_at": "document_start"}]);
173 connect_script_2 = true;
174 should_get_response_from_script_1 = false;
175 webview.src = url;
176 } else {
177 chrome.send('testResult', [false]);
178 }
179 return;
180 } else if (data == 'connected_response') {
181 console.log(
182 'Step 3: Another communication channel has been established ' +
183 'with webview.');
184 setTimeout(function() {
185 chrome.send('testResult', [true]);
186 }, 1000);
187 return;
188 }
189 console.log('Unexpected message: \'' + data[0] + '\'');
190 chrome.send('testResult', [false]);
191 });
192
193 webview.src = url;
194 document.body.appendChild(webview);
195 }
196
197 function testAddContentScriptToOneWebViewShouldNotInjectToTheOtherWebView(url) {
198 var webview1 = document.createElement('webview');
199 var webview2 = document.createElement('webview');
200
201 console.log("Step 1: call <webview1>.addContentScripts.");
202 webview1.addContentScripts(
203 [{"name": 'myrule',
204 "matches": ["http://*/empty*"],
205 "js": ["test/inject_comm_channel.js"],
206 "run_at": "document_start"}]);
207
208 webview2.addEventListener('loadstop', function() {
209 console.log("Step 2: webview2 requests to build communication channel.");
210 var msg = ['connect'];
211 webview2.contentWindow.postMessage(JSON.stringify(msg), '*');
212 setTimeout(function() {
213 chrome.send('testResult', [true]);
214 }, 2000);
215 });
216
217 window.addEventListener('message', function(e) {
218 var data = JSON.parse(e.data);
219 if (data == 'connected') {
220 chrome.send('testResult', [false]);
221 return;
222 }
223 console.log('Unexpected message: \'' + data[0] + '\'');
224 chrome.send('testResult', [false]);
225 });
226
227 webview1.src = url;
228 webview2.src = url;
229 document.body.appendChild(webview1);
230 document.body.appendChild(webview2);
231 }
232
233 function testAddAndRemoveContentScripts(url) {
234 var webview = document.createElement('webview');
235
236 console.log("Step 1: call <webview>.addContentScripts.");
237 webview.addContentScripts(
238 [{"name": 'myrule',
239 "matches": ["http://*/empty*"],
240 "js": ["test/inject_comm_channel.js"],
241 "run_at": "document_start"}]);
242
243 var count = 0;
244 webview.addEventListener('loadstop', function() {
245 if (count == 0) {
246 console.log('Step 2: post message to build connect.');
247 var msg = ['connect'];
248 webview.contentWindow.postMessage(JSON.stringify(msg), '*');
249 count++;
250 } else if (count == 1) {
251 console.log(
252 'Step 4: call <webview>.removeContentScripts and navigate.');
253 webview.removeContentScripts();
254 webview.src = url;
255 count++;
256 } else if (count == 2) {
257 console.log('Step 5: post message to build connect again.');
258 var msg = ['connect'];
259 webview.contentWindow.postMessage(JSON.stringify(msg), '*');
260 setTimeout(function() {
261 chrome.send('testResult', [true]);
262 }, 2000);
263 }
264 });
265
266 var replyCount = 0;
267 window.addEventListener('message', function(e) {
268 var data = JSON.parse(e.data);
269 if (data[0] == 'connected') {
270 console.log(
271 'Step 3: A communication channel has been established with webview.');
272 if (replyCount == 0) {
273 webview.setAttribute('src', 'about:blank');
274 replyCount++;
275 return;
276 } else if (replyCount == 1) {
277 chrome.send('testResult', [false]);
278 return;
279 }
280 }
281 console.log('Unexpected message: \'' + data[0] + '\'');
282 chrome.send('testResult', [false]);
283 });
284
285 webview.src = url;
286 document.body.appendChild(webview);
287 }
288
289 function testAddContentScriptsWithNewWindowAPI(url) {
290 var webview = document.createElement('webview');
291
292 var newwebview;
293 webview.addEventListener('newwindow', function(e) {
294 e.preventDefault();
295 newwebview = document.createElement('webview');
296
297 console.log('Step 2: call newwebview.addContentScripts.');
298 newwebview.addContentScripts(
299 [{"name": 'myrule',
300 "matches": ["http://*/guest_from_opener*"],
301 "js": ["test/inject_comm_channel.js"],
302 "run_at": "document_start"}]);
303
304 newwebview.addEventListener('loadstop', function(evt) {
305 var msg = ['connect'];
306 console.log('Step 4: new webview postmessage to build communication ' +
307 'channel.');
308 newwebview.contentWindow.postMessage(JSON.stringify(msg), '*');
309 });
310
311 document.body.appendChild(newwebview);
312 // attach the new window to the new <webview>.
313 console.log("Step 3: attaches the new webview.");
314 e.window.attach(newwebview);
315 });
316
317 window.addEventListener('message', function(e) {
318 var data = JSON.parse(e.data);
319 if (data == 'connected' && e.source == newwebview.contentWindow) {
320 console.log('Step 5: a communication channel has been established ' +
321 'with the new webview.');
322 chrome.send('testResult', [true]);
323 return;
324 } else {
325 chrome.send('testResult', [false]);
326 return;
327 }
328 console.log('unexpected message: \'' + data[0] + '\'');
329 chrome.send('testResult', [false]);
330 });
331
332 console.log('Step 1: navigates the webview to window open guest URL.');
333 webview.setAttribute('src', url);
334 document.body.appendChild(webview);
335 }
336
337 function testContentScriptIsInjectedAfterTerminateAndReloadWebView(url) {
338 var webview = document.createElement('webview');
339
340 console.log('Step 1: call <webview>.addContentScripts.');
341 webview.addContentScripts(
342 [{"name": 'myrule',
343 "matches": ["http://*/empty*"],
344 "js": ["test/inject_comm_channel.js"],
345 "run_at": "document_start"}]);
346
347 var count = 0;
348 webview.addEventListener('loadstop', function() {
349 if (count == 0) {
350 console.log('Step 2: call webview.terminate().');
351 webview.terminate();
352 ++count;
353 return;
354 } else if (count == 1) {
355 console.log('Step 4: postMessage to build communication.');
356 var msg = ['connect'];
357 webview.contentWindow.postMessage(JSON.stringify(msg), '*');
358 ++count;
359 }
360 });
361
362 webview.addEventListener('exit', function() {
363 console.log('Step 3: call webview.reload().');
364 webview.reload();
365 });
366
367 window.addEventListener('message', function(e) {
368 var data = JSON.parse(e.data);
369 if (data == 'connected') {
370 console.log(
371 'Step 5: A communication channel has been established with webview.');
372 chrome.send('testResult', [true]);
373 return;
374 }
375 console.log('Unexpected message: \'' + data[0] + '\'');
376 chrome.send('testResult', [false]);
377 });
378
379 webview.src = url;
380 document.body.appendChild(webview);
381 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698