| Index: chrome/test/data/extensions/platform_apps/web_view/focus/embedder.js
|
| diff --git a/chrome/test/data/extensions/platform_apps/web_view/focus/embedder.js b/chrome/test/data/extensions/platform_apps/web_view/focus/embedder.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b3f055ad9e63a9916c527b91f73444a5af053a2d
|
| --- /dev/null
|
| +++ b/chrome/test/data/extensions/platform_apps/web_view/focus/embedder.js
|
| @@ -0,0 +1,110 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +var embedder = {};
|
| +embedder.tests = {};
|
| +embedder.baseGuestURL = '';
|
| +embedder.guestURL = '';
|
| +
|
| +embedder.setUp = function(config) {
|
| + embedder.baseGuestURL = 'http://localhost:' + config.testServer.port;
|
| + embedder.guestURL = embedder.baseGuestURL +
|
| + '/files/extensions/platform_apps/web_view/focus' +
|
| + '/guest.html';
|
| + chrome.test.log('Guest url is: ' + embedder.guestURL);
|
| +};
|
| +
|
| +/** @private */
|
| +embedder.setUpGuest_ = function() {
|
| + document.querySelector('#webview-tag-container').innerHTML =
|
| + '<webview style="width: 100px; height: 100px;"></webview>';
|
| + var webview = document.querySelector('webview');
|
| + if (!webview) {
|
| + chrome.test.fail('No <webview> element created');
|
| + }
|
| + return webview;
|
| +};
|
| +
|
| +/** @private */
|
| +embedder.waitForResponseFromGuest_ =
|
| + function(webview,
|
| + testName,
|
| + channelCreationCallback,
|
| + expectedResponse,
|
| + responseCallback) {
|
| + var onPostMessageReceived = function(e) {
|
| + var data = JSON.parse(e.data);
|
| + var response = data[0];
|
| + if (response == 'channel-created') {
|
| + channelCreationCallback(webview);
|
| + return;
|
| + }
|
| + var name = data[1];
|
| + if ((response != expectedResponse) || (name != testName)) {
|
| + chrome.test.log('Unexpected response from guest.');
|
| + return;
|
| + }
|
| + responseCallback();
|
| + };
|
| + window.addEventListener('message', onPostMessageReceived);
|
| +
|
| + var onWebViewLoadStop = function(e) {
|
| + // This creates a communication channel with the guest.
|
| + webview.contentWindow.postMessage(
|
| + JSON.stringify(['create-channel', testName]), '*');
|
| + };
|
| + webview.addEventListener('loadstop', onWebViewLoadStop);
|
| + webview.setAttribute('src', embedder.guestURL);
|
| +};
|
| +
|
| +// Tests begin.
|
| +
|
| +// The embedder has to initiate a post message so that the guest can get a
|
| +// reference to embedder to send the reply back.
|
| +
|
| +embedder.testFocus_ = function(testName,
|
| + channelCreationCallback,
|
| + expectedResponse,
|
| + responseCallback) {
|
| + var webview = embedder.setUpGuest_();
|
| +
|
| + embedder.waitForResponseFromGuest_(webview,
|
| + testName,
|
| + channelCreationCallback,
|
| + expectedResponse,
|
| + responseCallback);
|
| +};
|
| +
|
| +embedder.tests.testFocusEvent = function testFocusEvent() {
|
| + var seenResponse = false;
|
| + embedder.testFocus_('testFocusEvent', function(webview) {
|
| + webview.focus();
|
| + }, 'focused', function() {
|
| + // The focus event fires three times on first focus. We only care about
|
| + // the first focus.
|
| + if (seenResponse)
|
| + return;
|
| + seenResponse = true;
|
| + chrome.test.succeed();
|
| + });
|
| +}
|
| +
|
| +embedder.tests.testBlurEvent = function testBlurEvent() {
|
| + var seenResponse = false;
|
| + embedder.testFocus_('testFocusEvent', function(webview) {
|
| + webview.focus();
|
| + }, 'blurred', function() {
|
| + chrome.test.succeed();
|
| + });
|
| +}
|
| +
|
| +onload = function() {
|
| + chrome.test.getConfig(function(config) {
|
| + embedder.setUp(config);
|
| + chrome.test.runTests([
|
| + embedder.tests.testFocusEvent,
|
| + embedder.tests.testBlurEvent
|
| + ]);
|
| + });
|
| +};
|
|
|