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
3 // found in the LICENSE file.
7 embedder.triggerNavUrl =
8 'data:text/html,<html><body>trigger navigation<body></html>';
10 window.runTest = function(testName) {
11 if (!embedder.test.testList[testName]) {
12 console.log('Incorrect testName: ' + testName);
18 embedder.test.testList[testName]();
20 // window.* exported functions end.
23 embedder.test.succeed = function() {
24 chrome.test.sendMessage('TEST_PASSED');
27 embedder.test.fail = function() {
28 chrome.test.sendMessage('TEST_FAILED');
31 embedder.test.assertEq = function(a, b) {
33 console.log('assertion failed: ' + a + ' != ' + b);
38 embedder.test.assertTrue = function(condition) {
40 console.log('assertion failed: true != ' + condition);
45 embedder.test.assertFalse = function(condition) {
47 console.log('assertion failed: false != ' + condition);
53 embedder.setUpGuest_ = function() {
54 document.querySelector('#webview-tag-container').innerHTML =
55 '<webview style="width: 100px; height: 100px;"></webview>';
56 var webview = document.querySelector('webview');
58 embedder.test.fail('No <webview> element created');
64 embedder.waitForResponseFromGuest_ =
66 channelCreationCallback,
69 var onPostMessageReceived = function(e) {
70 var data = JSON.parse(e.data);
71 var response = data[0];
72 if (response == 'connected') {
73 channelCreationCallback(webview);
76 if (response != expectedResponse) {
80 window.removeEventListener('message', onPostMessageReceived);
82 window.addEventListener('message', onPostMessageReceived);
84 var onWebViewLoadStop = function(e) {
85 console.log('loadstop');
86 webview.executeScript(
87 {file: 'inject_focus.js'},
89 console.log('Injected script into webview.');
90 // Establish a communication channel with the webview1's guest.
91 var msg = ['connect'];
92 webview.contentWindow.postMessage(JSON.stringify(msg), '*');
94 webview.removeEventListener('loadstop', onWebViewLoadStop);
96 webview.addEventListener('loadstop', onWebViewLoadStop);
97 webview.src = embedder.triggerNavUrl;
102 // The embedder has to initiate a post message so that the guest can get a
103 // reference to embedder to send the reply back.
105 embedder.testFocus_ = function(channelCreationCallback,
108 var webview = embedder.setUpGuest_();
110 embedder.waitForResponseFromGuest_(webview,
111 channelCreationCallback,
116 function testFocusEvent() {
117 var seenResponse = false;
118 embedder.testFocus_(function(webview) {
120 }, 'focused', function() {
121 // The focus event fires three times on first focus. We only care about
127 embedder.test.succeed();
131 function testBlurEvent() {
132 var seenResponse = false;
133 embedder.testFocus_(function(webview) {
136 }, 'blurred', function() {
141 embedder.test.succeed();
145 embedder.test.testList = {
146 'testFocusEvent': testFocusEvent,
147 'testBlurEvent': testBlurEvent
150 onload = function() {
151 chrome.test.getConfig(function(config) {
152 chrome.test.sendMessage('Launched');