OLD | NEW |
(Empty) | |
| 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. |
| 4 |
| 5 var embedder = {}; |
| 6 embedder.tests = {}; |
| 7 embedder.baseGuestURL = ''; |
| 8 embedder.guestURL = ''; |
| 9 |
| 10 embedder.setUp = function(config) { |
| 11 embedder.baseGuestURL = 'http://localhost:' + config.testServer.port; |
| 12 embedder.guestURL = embedder.baseGuestURL + |
| 13 '/files/extensions/platform_apps/web_view/focus' + |
| 14 '/guest.html'; |
| 15 chrome.test.log('Guest url is: ' + embedder.guestURL); |
| 16 }; |
| 17 |
| 18 /** @private */ |
| 19 embedder.setUpGuest_ = function() { |
| 20 document.querySelector('#webview-tag-container').innerHTML = |
| 21 '<webview style="width: 100px; height: 100px;"></webview>'; |
| 22 var webview = document.querySelector('webview'); |
| 23 if (!webview) { |
| 24 chrome.test.fail('No <webview> element created'); |
| 25 } |
| 26 return webview; |
| 27 }; |
| 28 |
| 29 /** @private */ |
| 30 embedder.waitForResponseFromGuest_ = |
| 31 function(webview, |
| 32 testName, |
| 33 channelCreationCallback, |
| 34 expectedResponse, |
| 35 responseCallback) { |
| 36 var onPostMessageReceived = function(e) { |
| 37 var data = JSON.parse(e.data); |
| 38 var response = data[0]; |
| 39 if (response == 'channel-created') { |
| 40 channelCreationCallback(webview); |
| 41 return; |
| 42 } |
| 43 var name = data[1]; |
| 44 if ((response != expectedResponse) || (name != testName)) { |
| 45 chrome.test.log('Unexpected response from guest.'); |
| 46 return; |
| 47 } |
| 48 responseCallback(); |
| 49 }; |
| 50 window.addEventListener('message', onPostMessageReceived); |
| 51 |
| 52 var onWebViewLoadStop = function(e) { |
| 53 // This creates a communication channel with the guest. |
| 54 webview.contentWindow.postMessage( |
| 55 JSON.stringify(['create-channel', testName]), '*'); |
| 56 }; |
| 57 webview.addEventListener('loadstop', onWebViewLoadStop); |
| 58 webview.setAttribute('src', embedder.guestURL); |
| 59 }; |
| 60 |
| 61 // Tests begin. |
| 62 |
| 63 // The embedder has to initiate a post message so that the guest can get a |
| 64 // reference to embedder to send the reply back. |
| 65 |
| 66 embedder.testFocus_ = function(testName, |
| 67 channelCreationCallback, |
| 68 expectedResponse, |
| 69 responseCallback) { |
| 70 var webview = embedder.setUpGuest_(); |
| 71 |
| 72 embedder.waitForResponseFromGuest_(webview, |
| 73 testName, |
| 74 channelCreationCallback, |
| 75 expectedResponse, |
| 76 responseCallback); |
| 77 }; |
| 78 |
| 79 embedder.tests.testFocusEvent = function testFocusEvent() { |
| 80 var seenResponse = false; |
| 81 embedder.testFocus_('testFocusEvent', function(webview) { |
| 82 webview.focus(); |
| 83 }, 'focused', function() { |
| 84 // The focus event fires three times on first focus. We only care about |
| 85 // the first focus. |
| 86 if (seenResponse) |
| 87 return; |
| 88 seenResponse = true; |
| 89 chrome.test.succeed(); |
| 90 }); |
| 91 } |
| 92 |
| 93 embedder.tests.testBlurEvent = function testBlurEvent() { |
| 94 var seenResponse = false; |
| 95 embedder.testFocus_('testFocusEvent', function(webview) { |
| 96 webview.focus(); |
| 97 }, 'blurred', function() { |
| 98 chrome.test.succeed(); |
| 99 }); |
| 100 } |
| 101 |
| 102 onload = function() { |
| 103 chrome.test.getConfig(function(config) { |
| 104 embedder.setUp(config); |
| 105 chrome.test.runTests([ |
| 106 embedder.tests.testFocusEvent, |
| 107 embedder.tests.testBlurEvent |
| 108 ]); |
| 109 }); |
| 110 }; |
OLD | NEW |