11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivar embedder = {};
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TODO(lfg) Move these functions to a common js.
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciwindow.runTest = function(testName) {
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!embedder.test.testList[testName]) {
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    window.console.warn('Incorrect testName: ' + testName);
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    embedder.test.fail();
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return;
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Run the test.
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  embedder.test.testList[testName]();
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciembedder.test = {};
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciembedder.test.assertEq = function(a, b) {
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (a != b) {
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    window.console.warn('assertion failed: ' + a + ' != ' + b);
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    embedder.test.fail();
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciembedder.test.assertFalse = function(condition) {
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (condition) {
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    window.console.warn('assertion failed: false != ' + condition);
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    embedder.test.fail();
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciembedder.test.assertTrue = function(condition) {
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!condition) {
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    window.console.warn('assertion failed: true != ' + condition);
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    embedder.test.fail();
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciembedder.test.fail = function() {
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  chrome.test.sendMessage('TEST_FAILED');
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciembedder.test.succeed = function() {
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  chrome.test.sendMessage('TEST_PASSED');
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests begin.
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// This test verifies that the allowtransparency property cannot be changed
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// once set. The attribute can only be deleted.
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction testAllowTransparencyAttribute() {
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  var webview = document.createElement('webview');
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.src = 'data:text/html,webview test';
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.allowtransparency = true;
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.addEventListener('loadstop', function(e) {
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    embedder.test.assertTrue(webview.hasAttribute('allowtransparency'));
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.allowtransparency = false;
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    embedder.test.assertTrue(webview.allowtransparency);
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    embedder.test.assertTrue(webview.hasAttribute('allowtransparency'));
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.removeAttribute('allowtransparency');
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    embedder.test.assertFalse(webview.allowtransparency);
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    embedder.test.succeed();
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  });
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  document.body.appendChild(webview);
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction testAPIMethodExistence() {
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  var apiMethodsToCheck = [
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'back',
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'find',
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'forward',
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'canGoBack',
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'canGoForward',
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'clearData',
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'getProcessId',
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'getZoom',
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'go',
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'print',
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'reload',
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'setZoom',
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'stop',
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'stopFinding',
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'terminate',
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'executeScript',
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'insertCSS',
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'getUserAgent',
931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'isUserAgentOverridden',
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    'setUserAgentOverride'
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ];
961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  var webview = document.createElement('webview');
971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.setAttribute('partition', arguments.callee.name);
981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.addEventListener('loadstop', function(e) {
991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    for (var i = 0; i < apiMethodsToCheck.length; ++i) {
1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      embedder.test.assertEq('function',
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                             typeof webview[apiMethodsToCheck[i]]);
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Check contentWindow.
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    embedder.test.assertEq('object', typeof webview.contentWindow);
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    embedder.test.assertEq('function',
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                           typeof webview.contentWindow.postMessage);
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    embedder.test.succeed();
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  });
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.setAttribute('src', 'data:text/html,webview check api');
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  document.body.appendChild(webview);
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Makes sure 'sizechanged' event is fired only if autosize attribute is
1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// specified.
1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// After loading <webview> without autosize attribute and a size, say size1,
1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// we set autosize attribute and new min size with size2. We would get (only
1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// one) sizechanged event with size1 as old size and size2 as new size.
1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction testAutosizeAfterNavigation() {
1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  var webview = document.createElement('webview');
1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  var step = 1;
1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  var sizeChangeHandler = function(e) {
1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    switch (step) {
1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      case 1:
1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        // This would be triggered after we set autosize attribute.
1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertEq(50, e.oldWidth);
1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertEq(100, e.oldHeight);
1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertTrue(e.newWidth >= 60 && e.newWidth <= 70);
1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertTrue(e.newHeight >= 110 && e.newHeight <= 120);
1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        // Remove autosize attribute and expect webview to return to its
1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        // original size.
1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        webview.removeAttribute('autosize');
1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        break;
1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      case 2:
1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        // Expect 50x100.
1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertEq(50, e.newWidth);
1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertEq(100, e.newHeight);
1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.succeed();
1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        break;
1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      default:
1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        window.console.log('Unexpected sizechanged event, step = ' + step);
1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.fail();
1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        break;
1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ++step;
1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  };
1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.addEventListener('sizechanged', sizeChangeHandler);
1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.addEventListener('loadstop', function(e) {
1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.setAttribute('autosize', true);
1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.setAttribute('minwidth', 60);
1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.setAttribute('maxwidth', 70);
1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.setAttribute('minheight', 110);
1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.setAttribute('maxheight', 120);
1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  });
1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.style.width = '50px';
1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.style.height = '100px';
1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.setAttribute('src', 'data:text/html,webview test sizechanged event');
1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  document.body.appendChild(webview);
1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// This test verifies that if a browser plugin is in autosize mode before
1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// navigation then the guest starts auto-sized.
1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction testAutosizeBeforeNavigation() {
1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  var webview = document.createElement('webview');
1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.setAttribute('autosize', 'true');
1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.setAttribute('minwidth', 200);
1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.setAttribute('maxwidth', 210);
1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.setAttribute('minheight', 100);
1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.setAttribute('maxheight', 110);
1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.addEventListener('sizechanged', function(e) {
1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    embedder.test.assertTrue(e.newWidth >= 200 && e.newWidth <= 210);
1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    embedder.test.assertTrue(e.newHeight >= 100 && e.newHeight <= 110);
1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    embedder.test.succeed();
1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  });
1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.setAttribute('src', 'data:text/html,webview test sizechanged event');
1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  document.body.appendChild(webview);
1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// This test verifies that a lengthy page with autosize enabled will report
1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// the correct height in the sizechanged event.
1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction testAutosizeHeight() {
1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  var webview = document.createElement('webview');
1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.autosize = true;
1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.minwidth = 200;
1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.maxwidth = 210;
1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.minheight = 40;
1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.maxheight = 200;
1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  var step = 1;
2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.addEventListener('sizechanged', function(e) {
2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    switch (step) {
2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      case 1:
2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertEq(200, e.newHeight);
2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        // Change the maxheight to verify that we see the change.
2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        webview.maxheight = 50;
2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        break;
2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      case 2:
2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertEq(200, e.oldHeight);
2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertEq(50, e.newHeight);
2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.succeed();
2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        break;
2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      default:
2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        window.console.log('Unexpected sizechanged event, step = ' + step);
2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.fail();
2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        break;
2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ++step;
2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  });
2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.src = 'data:text/html,' +
2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                'a<br/>b<br/>c<br/>d<br/>e<br/>f<br/>' +
2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                'a<br/>b<br/>c<br/>d<br/>e<br/>f<br/>' +
2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                'a<br/>b<br/>c<br/>d<br/>e<br/>f<br/>' +
2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                'a<br/>b<br/>c<br/>d<br/>e<br/>f<br/>' +
2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                'a<br/>b<br/>c<br/>d<br/>e<br/>f<br/>';
2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  document.body.appendChild(webview);
2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// This test verifies that all autosize attributes can be removed
2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// without crashing the plugin, or throwing errors.
2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction testAutosizeRemoveAttributes() {
2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  var webview = document.createElement('webview');
2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  var step = 1;
2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  var sizeChangeHandler = function(e) {
2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    switch (step) {
2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      case 1:
2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        // This is the sizechanged event for autosize.
2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        // Remove attributes.
2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        webview.removeAttribute('minwidth');
2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        webview.removeAttribute('maxwidth');
2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        webview.removeAttribute('minheight');
2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        webview.removeAttribute('maxheight');
2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        webview.removeAttribute('autosize');
2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        // We'd get one more sizechanged event after we turn off
2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        // autosize.
2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        webview.style.width = '500px';
2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        webview.style.height = '500px';
2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        break;
2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      case 2:
2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.succeed();
2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        break;
2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ++step;
2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  };
2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.addEventListener('loadstop', function(e) {
2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.minwidth = 300;
2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.maxwidth = 700;
2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.minheight = 600;
2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.maxheight = 400;
2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.autosize = true;
2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  });
2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.addEventListener('sizechanged', sizeChangeHandler);
2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.style.width = '640px';
2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.style.height = '480px';
2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.setAttribute('src', 'data:text/html,webview check autosize');
2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  document.body.appendChild(webview);
2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// This test verifies that autosize works when some of the parameters are unset.
2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction testAutosizeWithPartialAttributes() {
2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  window.console.log('testAutosizeWithPartialAttributes');
2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  var webview = document.createElement('webview');
2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  var step = 1;
2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  var sizeChangeHandler = function(e) {
2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    window.console.log('sizeChangeHandler, new: ' +
2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       e.newWidth + ' X ' + e.newHeight);
2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    switch (step) {
2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      case 1:
2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        // Expect 300x200.
2891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertEq(300, e.newWidth);
2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertEq(200, e.newHeight);
2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        // Change the min size to cause a relayout.
2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        webview.minwidth = 500;
2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        break;
2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      case 2:
2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertTrue(e.newWidth >= webview.minwidth);
2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertTrue(e.newWidth <= webview.maxwidth);
2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        // Tests when minwidth > maxwidth, minwidth = maxwidth.
3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        // i.e. minwidth is essentially 700.
3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        webview.minwidth = 800;
3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        break;
3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      case 3:
3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        // Expect 700X?
3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertEq(700, e.newWidth);
3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertTrue(e.newHeight >= 200);
3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.assertTrue(e.newHeight <= 600);
3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.succeed();
3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        break;
3111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      default:
3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        window.console.log('Unexpected sizechanged event, step = ' + step);
3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        embedder.test.fail();
3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        break;
3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ++step;
3181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  };
3191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.addEventListener('sizechanged', sizeChangeHandler);
3211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.addEventListener('loadstop', function(e) {
3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.minwidth = 300;
3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.maxwidth = 700;
3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.minheight = 200;
3261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.maxheight = 600;
3271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    webview.autosize = true;
3281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  });
3291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.style.width = '640px';
3311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.style.height = '480px';
3321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  webview.setAttribute('src', 'data:text/html,webview check autosize');
3331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  document.body.appendChild(webview);
3341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
3351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Tests end.
3381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciembedder.test.testList = {
3401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'testAllowTransparencyAttribute': testAllowTransparencyAttribute,
3411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'testAPIMethodExistence': testAPIMethodExistence,
3421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'testAutosizeAfterNavigation': testAutosizeAfterNavigation,
3431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'testAutosizeBeforeNavigation': testAutosizeBeforeNavigation,
3441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'testAutosizeHeight': testAutosizeHeight,
3451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'testAutosizeRemoveAttributes': testAutosizeRemoveAttributes,
3461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  'testAutosizeWithPartialAttributes': testAutosizeWithPartialAttributes
3471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
3481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccionload = function() {
3501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  chrome.test.sendMessage('LAUNCHED');
3511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
352