- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / test / data / extensions / platform_apps / web_view / common / utils.js
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 $ = function(id) { return document.getElementById(id); };
6 var LOG = function(msg) { window.console.log(msg); };
7
8 var embedder = {};
9 embedder.guestURL = '';
10 embedder.webview = null;
11
12 // This is filled in by the embedder bootstrap.js.
13 var config = {};
14
15 var utils = {};
16 utils.test = {};
17
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();
25 };
26
27 utils.test.fail = function(opt_msg) {
28   LOG('utils.test.fail, test failure: ' + opt_msg || '');
29   chrome.test.fail(opt_msg || '');
30 };
31
32 utils.test.assertEq = function(expected, actual) {
33   chrome.test.assertEq.apply(chrome.test.assertEq, arguments);
34 };
35
36 utils.setUp = function(chromeConfig, config) {
37   if (config.IS_JS_ONLY_GUEST) {
38     embedder.guestURL = 'about:blank';
39   } else {
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';
44   }
45   chrome.test.log('Guest url is: ' + embedder.guestURL);
46 };
47
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');
55 };
56
57 embedder.loadGuest = function(
58     connectedCallback, postMessageCallback, opt_partitionName,
59     opt_preLoadHooks) {
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;
66   }
67   if (!embedder.webview) {
68     utils.test.fail('No <webview> element created');
69     return;
70   }
71
72   embedder.webview.addEventListener('consolemessage', function(e) {
73     LOG('FROM GUEST: ' + e.message);
74   });
75
76   // Step 1. loadstop.
77   embedder.webview.addEventListener('loadstop', function(e) {
78     LOG('embedder.webview.loadstop');
79
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'},
87           function(results) {
88             if (!results || !results.length) {
89               LOG('Error injecting JavaScript to guest');
90               utils.test.fail();
91               return;
92             }
93             embedder.webview.contentWindow.postMessage(
94                 JSON.stringify(['create-channel']), '*');
95           });
96     } else {
97       embedder.webview.contentWindow.postMessage(
98           JSON.stringify(['create-channel']), '*');
99     }
100   });
101
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);
109     } else {
110       if (!postMessageCallback(data)) {
111         chrome.test.log('Unexpected response from guest');
112         utils.test.fail();
113       }
114     }
115   };
116
117   if (opt_preLoadHooks) {
118     opt_preLoadHooks(embedder.webview);
119   }
120
121   window.addEventListener('message', onPostMessageReceived);
122   embedder.webview.setAttribute('src', embedder.guestURL);
123 };
124