Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / test / data / extensions / platform_apps / web_view / shim / main.js
index e0e0ca1..8a98077 100644 (file)
@@ -24,10 +24,14 @@ embedder.setUp_ = function(config) {
       '/extensions/platform_apps/web_view/shim/guest.html';
   embedder.noReferrerGuestURL = embedder.baseGuestURL +
       '/extensions/platform_apps/web_view/shim/guest_noreferrer.html';
+  embedder.detectUserAgentURL = embedder.baseGuestURL + '/detect-user-agent';
   embedder.redirectGuestURL = embedder.baseGuestURL + '/server-redirect';
   embedder.redirectGuestURLDest = embedder.baseGuestURL +
       '/extensions/platform_apps/web_view/shim/guest_redirect.html';
   embedder.closeSocketURL = embedder.baseGuestURL + '/close-socket';
+  embedder.testImageBaseURL = embedder.baseGuestURL +
+      '/extensions/platform_apps/web_view/shim/';
+  embedder.virtualURL = 'http://virtualurl/';
 };
 
 window.runTest = function(testName) {
@@ -93,20 +97,28 @@ embedder.test.assertFalse = function(condition) {
 
 // Tests begin.
 
-// This test verifies that the allowtransparency property cannot be changed
-// once set. The attribute can only be deleted.
+// This test verifies that the allowtransparency property is interpreted as true
+// if it exists (regardless of its value), and can be removed by setting it to
+// to anything false.
 function testAllowTransparencyAttribute() {
   var webview = document.createElement('webview');
   webview.src = 'data:text/html,webview test';
+  embedder.test.assertFalse(webview.hasAttribute('allowtransparency'));
+  embedder.test.assertFalse(webview.allowtransparency);
   webview.allowtransparency = true;
 
   webview.addEventListener('loadstop', function(e) {
     embedder.test.assertTrue(webview.hasAttribute('allowtransparency'));
-    webview.allowtransparency = false;
     embedder.test.assertTrue(webview.allowtransparency);
-    embedder.test.assertTrue(webview.hasAttribute('allowtransparency'));
-    webview.removeAttribute('allowtransparency');
+    webview.allowtransparency = false;
+    embedder.test.assertFalse(webview.hasAttribute('allowtransparency'));
+    embedder.test.assertFalse(webview.allowtransparency);
+    webview.allowtransparency = '';
+    embedder.test.assertFalse(webview.hasAttribute('allowtransparency'));
     embedder.test.assertFalse(webview.allowtransparency);
+    webview.allowtransparency = 'some string';
+    embedder.test.assertTrue(webview.hasAttribute('allowtransparency'));
+    embedder.test.assertTrue(webview.allowtransparency);
     embedder.test.succeed();
   });
 
@@ -612,7 +624,7 @@ function testLoadProgressEvent() {
 // Current expected behavior is that the second event listener will still
 // fire without crashing.
 function testDestroyOnEventListener() {
-  var webview = util.createWebViewTagInDOM(arguments.callee.name);
+  var webview = document.createElement('webview');
   var url = 'data:text/html,<body>Destroy test</body>';
 
   var loadCommitCount = 0;
@@ -643,13 +655,14 @@ function testDestroyOnEventListener() {
     loadCommitCommon(e);
   });
   webview.setAttribute('src', url);
+  document.body.appendChild(webview);
 }
 
 // This test registers two event listeners on a same event (loadcommit).
 // Each of the listener tries to change some properties on the event param,
 // which should not be possible.
 function testCannotMutateEventName() {
-  var webview = util.createWebViewTagInDOM(arguments.callee.name);
+  var webview = document.createElement('webview');
   var url = 'data:text/html,<body>Two</body>';
 
   var loadCommitACalled = false;
@@ -691,23 +704,20 @@ function testCannotMutateEventName() {
   webview.addEventListener('loadcommit', onLoadCommitA);
   webview.addEventListener('loadcommit', onLoadCommitB);
   webview.setAttribute('src', url);
+  document.body.appendChild(webview);
 }
 
-// This test verifies that setting the partition attribute after the src has
-// been set raises an exception.
-function testPartitionRaisesException() {
+// This test verifies that the partion attribute cannot be changed after the src
+// has been set.
+function testPartitionChangeAfterNavigation() {
   var webview = document.createElement('webview');
   var partitionAttribute = arguments.callee.name;
   webview.setAttribute('partition', partitionAttribute);
 
   var loadstopHandler = function(e) {
-    try {
-      webview.partition = 'illegal';
-      embedder.test.fail();
-    } catch (e) {
-      embedder.test.assertEq(partitionAttribute, webview.partition);
-      embedder.test.succeed();
-    }
+    webview.partition = 'illegal';
+    embedder.test.assertEq(partitionAttribute, webview.partition);
+    embedder.test.succeed();
   };
   webview.addEventListener('loadstop', loadstopHandler);
 
@@ -1080,6 +1090,52 @@ function testWebRequestAPI() {
   document.body.appendChild(webview);
 }
 
+// This test verifies that the WebRequest API onBeforeSendHeaders event fires on
+// webview and supports headers. This tests verifies that we can modify HTTP
+// headers via the WebRequest API and those modified headers will be sent to the
+// HTTP server.
+function testWebRequestAPIWithHeaders() {
+  var webview = new WebView();
+  var requestFilter = {
+    urls: ['<all_urls>']
+  };
+  var extraInfoSpec = ['requestHeaders', 'blocking'];
+  webview.request.onBeforeSendHeaders.addListener(function(details) {
+    var headers = details.requestHeaders;
+    for( var i = 0, l = headers.length; i < l; ++i ) {
+      if (headers[i].name == 'User-Agent') {
+        headers[i].value = 'foobar';
+        break;
+      }
+    }
+    var blockingResponse = {};
+    blockingResponse.requestHeaders = headers;
+    return blockingResponse;
+  }, requestFilter, extraInfoSpec);
+
+  var loadstartCalled = false;
+  webview.addEventListener('loadstart', function(e) {
+    embedder.test.assertTrue(e.isTopLevel);
+    embedder.test.assertEq(embedder.detectUserAgentURL, e.url);
+    loadstartCalled = true;
+  });
+
+  webview.addEventListener('loadredirect', function(e) {
+    embedder.test.assertTrue(e.isTopLevel);
+    embedder.test.assertEq(embedder.detectUserAgentURL,
+        e.oldUrl.replace('127.0.0.1', 'localhost'));
+    embedder.test.assertEq(embedder.redirectGuestURLDest,
+        e.newUrl.replace('127.0.0.1', 'localhost'));
+    if (loadstartCalled) {
+      embedder.test.succeed();
+    } else {
+      embedder.test.fail();
+    }
+  });
+  webview.src = embedder.detectUserAgentURL;
+  document.body.appendChild(webview);
+}
+
 // This test verifies that the basic use cases of the declarative WebRequest API
 // work as expected. This test demonstrates that rules can be added prior to
 // navigation and attachment.
@@ -1568,6 +1624,70 @@ function testResizeWebviewResizesContent() {
   document.body.appendChild(webview);
 }
 
+function testResizeWebviewWithDisplayNoneResizesContent() {
+  var webview = new WebView();
+  webview.src = 'about:blank';
+  var loadStopCalled = false;
+  webview.addEventListener('loadstop', function listener(e) {
+    if (loadStopCalled) {
+      window.console.log('webview is unexpectedly reloading.');
+      embedder.test.fail();
+      return;
+    }
+    loadStopCalled = true;
+    webview.executeScript(
+      {file: 'inject_resize_test.js'},
+      function(results) {
+        if (!results || !results.length) {
+          embedder.test.fail();
+          return;
+        }
+        window.console.log('The resize test has been injected into webview.');
+      }
+    );
+    webview.executeScript(
+      {file: 'inject_comm_channel.js'},
+      function(results) {
+        if (!results || !results.length) {
+          embedder.test.fail();
+          return;
+        }
+        window.console.log('The guest script for a two-way comm channel has ' +
+            'been injected into webview.');
+        // Establish a communication channel with the guest.
+        var msg = ['connect'];
+        webview.contentWindow.postMessage(JSON.stringify(msg), '*');
+      }
+    );
+  });
+  window.addEventListener('message', function(e) {
+    var data = JSON.parse(e.data);
+    if (data[0] == 'connected') {
+      console.log('A communication channel has been established with webview.');
+      console.log('Resizing <webview> width from 300px to 400px.');
+      webview.style.display = 'none';
+      window.setTimeout(function() {
+        webview.style.width = '400px';
+        window.setTimeout(function() {
+          webview.style.display = 'block';
+        }, 0);
+      }, 0);
+      return;
+    }
+    if (data[0] == 'resize') {
+      var width = data[1];
+      var height = data[2];
+      embedder.test.assertEq(400, width);
+      embedder.test.assertEq(300, height);
+      embedder.test.succeed();
+      return;
+    }
+    window.console.log('Unexpected message: \'' + data[0]  + '\'');
+    embedder.test.fail();
+  });
+  document.body.appendChild(webview);
+}
+
 function testPostMessageCommChannel() {
   var webview = new WebView();
   webview.src = 'about:blank';
@@ -1638,7 +1758,7 @@ function testZoomAPI() {
   webview.addEventListener('loadstop', function(e) {
     // getZoom() should work initially.
     webview.getZoom(function(zoomFactor) {
-      embedder.test.assertFalse(zoomFactor == undefined);
+      embedder.test.assertEq(zoomFactor, 1);
     });
 
     // Two consecutive calls to getZoom() should return the same result.
@@ -1827,6 +1947,43 @@ function testFindAPI_findupdate() {
   document.body.appendChild(webview);
 };
 
+function testLoadDataAPI() {
+  var webview = new WebView();
+  webview.src = 'about:blank';
+
+  var loadstopListener2 = function(e) {
+    // Test the virtual URL.
+    embedder.test.assertEq(webview.src, embedder.virtualURL);
+
+    // Test that the image was loaded from the right source.
+    webview.executeScript(
+        {code: "document.querySelector('img').src"}, function(e) {
+          embedder.test.assertEq(e, embedder.testImageBaseURL + "test.bmp");
+
+          // Test that insertCSS works (executeScript already works to reach
+          // this point).
+          webview.insertCSS({code: ''}, function() {
+            embedder.test.succeed();
+          });
+        });
+  }
+
+  var loadstopListener1 = function(e) {
+    webview.removeEventListener('loadstop', loadstopListener1);
+    webview.addEventListener('loadstop', loadstopListener2);
+
+    // Load a data URL containing a relatively linked image, with the
+    // image's base URL specified, and a virtual URL provided.
+    webview.loadDataWithBaseUrl("data:text/html;base64,PGh0bWw+CiAgVGhpcyBpcy" +
+        "BhIHRlc3QuPGJyPgogIDxpbWcgc3JjPSJ0ZXN0LmJtcCI+PGJyPgo8L2h0bWw+Cg==",
+                                embedder.testImageBaseURL,
+                                embedder.virtualURL);
+  }
+
+  webview.addEventListener('loadstop', loadstopListener1);
+  document.body.appendChild(webview);
+};
+
 embedder.test.testList = {
   'testAllowTransparencyAttribute': testAllowTransparencyAttribute,
   'testAutosizeHeight': testAutosizeHeight,
@@ -1848,7 +2005,7 @@ embedder.test.testList = {
   'testLoadProgressEvent': testLoadProgressEvent,
   'testDestroyOnEventListener': testDestroyOnEventListener,
   'testCannotMutateEventName': testCannotMutateEventName,
-  'testPartitionRaisesException': testPartitionRaisesException,
+  'testPartitionChangeAfterNavigation': testPartitionChangeAfterNavigation,
   'testPartitionRemovalAfterNavigationFails':
       testPartitionRemovalAfterNavigationFails,
   'testExecuteScriptFail': testExecuteScriptFail,
@@ -1872,6 +2029,7 @@ embedder.test.testList = {
   'testDeclarativeWebRequestAPISendMessage':
       testDeclarativeWebRequestAPISendMessage,
   'testWebRequestAPI': testWebRequestAPI,
+  'testWebRequestAPIWithHeaders': testWebRequestAPIWithHeaders,
   'testWebRequestAPIGoogleProperty': testWebRequestAPIGoogleProperty,
   'testWebRequestListenerSurvivesReparenting':
       testWebRequestListenerSurvivesReparenting,
@@ -1893,11 +2051,14 @@ embedder.test.testList = {
   'testRemoveWebviewOnExit': testRemoveWebviewOnExit,
   'testRemoveWebviewAfterNavigation': testRemoveWebviewAfterNavigation,
   'testResizeWebviewResizesContent': testResizeWebviewResizesContent,
+  'testResizeWebviewWithDisplayNoneResizesContent':
+      testResizeWebviewWithDisplayNoneResizesContent,
   'testPostMessageCommChannel': testPostMessageCommChannel,
   'testScreenshotCapture' : testScreenshotCapture,
   'testZoomAPI' : testZoomAPI,
   'testFindAPI': testFindAPI,
-  'testFindAPI_findupdate': testFindAPI
+  'testFindAPI_findupdate': testFindAPI,
+  'testLoadDataAPI': testLoadDataAPI
 };
 
 onload = function() {