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.
5 var $ = function(id) { return document.getElementById(id); };
6 var LOG = function(msg) { window.console.log(msg); };
9 embedder.guestURL = '';
10 embedder.webview = null;
12 // This is filled in by the embedder bootstrap.js.
18 // Note that chrome.test.succeed() and chrome.test.fail() is wrapped below
19 // so that we can run manual tests (i.e. sending custom
20 // chrome.test.sendMessage-s to pass/fail test) once we start running them
21 // through this common code.
22 utils.test.succeed = function() {
23 LOG('utils.test.succeed');
24 chrome.test.succeed();
27 utils.test.fail = function(opt_msg) {
28 LOG('utils.test.fail, test failure: ' + opt_msg || '');
29 chrome.test.fail(opt_msg || '');
32 utils.test.assertEq = function(expected, actual) {
33 chrome.test.assertEq.apply(chrome.test.assertEq, arguments);
36 utils.setUp = function(chromeConfig, config) {
37 if (config.IS_JS_ONLY_GUEST) {
38 embedder.guestURL = 'about:blank';
40 var baseGuestURL = 'http://localhost:' + chromeConfig.testServer.port;
41 embedder.guestURL = baseGuestURL +
42 '/extensions/platform_apps/web_view/common/' +
43 config.TEST_DIR + '/guest.html';
45 chrome.test.log('Guest url is: ' + embedder.guestURL);
48 utils.injectCss = function(cssScriptPath) {
49 LOG('BEG utils.injectCss: ' + cssScriptPath);
50 var style = document.createElement('style');
51 style.type = 'text/css';
52 style.src = cssScriptPath;
53 document.getElementsByTagName('head')[0].appendChild(style);
54 LOG('END utils.injectCss');
57 embedder.loadGuest = function(
58 connectedCallback, postMessageCallback, opt_partitionName,
60 LOG('embedder.loadGuest begin');
61 document.querySelector('#webview-tag-container').innerHTML =
62 '<webview style="width: 100px; height: 100px;"></webview>';
63 embedder.webview = document.querySelector('webview');
64 if (opt_partitionName) {
65 embedder.webview.partition = opt_partitionName;
67 if (!embedder.webview) {
68 utils.test.fail('No <webview> element created');
72 embedder.webview.addEventListener('consolemessage', function(e) {
73 LOG('FROM GUEST: ' + e.message);
77 embedder.webview.addEventListener('loadstop', function(e) {
78 LOG('embedder.webview.loadstop');
80 LOG('IS_JS_ONLY_GUEST: ' + config.IS_JS_ONLY_GUEST);
81 if (config.IS_JS_ONLY_GUEST) {
82 // We do not have a TestServer, we load a guest pointing to
83 // about:blank and inject script to it.
84 LOG('embedder.webview.inject');
85 embedder.webview.executeScript(
86 {file: config.TEST_DIR + '/guest.js'},
88 if (!results || !results.length) {
89 LOG('Error injecting JavaScript to guest');
93 embedder.webview.contentWindow.postMessage(
94 JSON.stringify(['create-channel']), '*');
97 embedder.webview.contentWindow.postMessage(
98 JSON.stringify(['create-channel']), '*');
102 // Step 2. Receive postMessage.
103 var onPostMessageReceived = function(e) {
104 LOG('embedder.webview.onPostMessageReceived');
105 var data = JSON.parse(e.data);
106 var response = data[0];
107 if (response == 'channel-created') {
108 connectedCallback(embedder.webview);
110 if (!postMessageCallback(data)) {
111 chrome.test.log('Unexpected response from guest');
117 if (opt_preLoadHooks) {
118 opt_preLoadHooks(embedder.webview);
121 window.addEventListener('message', onPostMessageReceived);
122 embedder.webview.setAttribute('src', embedder.guestURL);