text: // Copyright (c) 2012 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.
  
  chrome.test.getConfig(function(config) {
    var IN_APP_URL = 'nav-target.html';
    var REMOTE_URL = 'http://localhost:' + config.testServer.port
        '/files/extensions/platform_apps/navigation/nav-target.html';
  
    var testForm = document.getElementById('test-form');
    var testLink = document.getElementById('test-link');
  
    function clickTestLink() {
      var clickEvent = document.createEvent('MouseEvents');
      clickEvent.initMouseEvent('click', true, true, window,
                                0, 0, 0, 0, 0, false, false,
                                false, false, 0, null);
  
      return testLink.dispatchEvent(clickEvent);
    }
  
    var tests = [
      // Location functions to in-app URLs.
      function() { window.location = IN_APP_URL },
      function() { window.location.href = IN_APP_URL; },
      function() { window.location.replace(IN_APP_URL); },
      function() { window.location.assign(IN_APP_URL); },
  
      // Location function to remote URLs (not testing all ways of navigating to
      // it, since that was covered by the previous set)
      function() { window.location = REMOTE_URL; },
  
      // Form submission (GET, POST, in-app, and remote)
      function() {
        testForm.method = 'GET';
        testForm.action = IN_APP_URL;
        testForm.submit();
      },
      function() {
        testForm.method = 'POST';
        testForm.action = IN_APP_URL;
        testForm.submit();
      },
      function() {
        testForm.method = 'GET';
        testForm.action = REMOTE_URL;
        testForm.submit();
      },
      function() {
        testForm.method = 'POST';
        testForm.action = REMOTE_URL;
        testForm.submit();
      },
  
      // Clicks on links (in-app and remote).
      function() { testLink.href = IN_APP_URL; clickTestLink(); },
      function() { testLink.href = REMOTE_URL; clickTestLink(); },
  
      // Links with target blank and a remote URL open a new tab in the browser
      // (verified in C++).
      function() {
        testLink.target = '_blank';
        testLink.href = IN_APP_URL;
        clickTestLink();
      },
      function() { testLink.href = 'http://chromium.org'; clickTestLink(); },
  
      // If we manage to execute this test case, then we haven't navigated away.
      function() { chrome.test.notifyPass(); }
    ];
  
    var testIndex = 0;
  
    function runTest() {
      var test = tests[testIndex++];
  
      console.log('Testing ' + (testIndex - 1) + ': ' + test);
      test();
  
      if (testIndex < tests.length) {
        // Don't run the next test immediately, since navigation happens
        // asynchronously, and if we do end up navigating, we don't want to still
        // execute the final test case (which signals success).
        window.setTimeout(runTest, 100);
      }
    }
  
    runTest();
  });
  