// Copyright (c) 2011 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.

function getURLHttpXHR() {
  return getServerURL('extensions/api_test/webrequest/xhr/a.html');
}
function getURLHttpXHRJavaScript() {
  return getServerURL('extensions/api_test/webrequest/xhr/a.js');
}
function getURLHttpXHRData() {
  return getServerURL('extensions/api_test/webrequest/xhr/data.json');
}

runTests([
  // Navigates to a page with subresources.
  function complexLoad() {
    expect(
      [  // events
        { label: "a.html-onBeforeRequest",
          event: "onBeforeRequest",
          details: {
            type: "main_frame",
            url: getURL("complexLoad/a.html"),
            frameUrl: getURL("complexLoad/a.html"),
            initiator: getDomain(initiators.BROWSER_INITIATED)
          }
        },
        { label: "b.html-onBeforeRequest",
          event: "onBeforeRequest",
          details: {
            type: "sub_frame",
            url: getURL("complexLoad/b.html"),
            frameUrl: getURL("complexLoad/b.html"),
            frameId: 1,
            parentFrameId: 0,
            initiator: getDomain(initiators.WEB_INITIATED)
          }
        },
        { label: "b.jpg-onBeforeRequest",
          event: "onBeforeRequest",
          details: {
            type: "image",
            url: getURL("complexLoad/b.jpg"),
            frameUrl: getURL("complexLoad/b.html"),
            frameId: 1,
            parentFrameId: 0,
            initiator: getDomain(initiators.WEB_INITIATED)
          }
        },
        { label: "a.html-onResponseStarted",
          event: "onResponseStarted",
          details: {
            type: "main_frame",
            url: getURL("complexLoad/a.html"),
            fromCache: false,
            statusCode: 200,
            statusLine: "HTTP/1.1 200 OK",
            initiator: getDomain(initiators.BROWSER_INITIATED)
            // Request to chrome-extension:// url has no IP.
          }
        },
        { label: "b.html-onResponseStarted",
          event: "onResponseStarted",
          details: {
            type: "sub_frame",
            url: getURL("complexLoad/b.html"),
            fromCache: false,
            statusCode: 200,
            statusLine: "HTTP/1.1 200 OK",
            frameId: 1,
            parentFrameId: 0,
            initiator: getDomain(initiators.WEB_INITIATED)
            // Request to chrome-extension:// url has no IP.
          }
        },
        { label: "b.jpg-onResponseStarted",
          event: "onResponseStarted",
          details: {
            type: "image",
            url: getURL("complexLoad/b.jpg"),
            fromCache: false,
            statusCode: 200,
            statusLine: "HTTP/1.1 200 OK",
            frameId: 1,
            parentFrameId: 0,
            initiator: getDomain(initiators.WEB_INITIATED)
            // Request to chrome-extension:// url has no IP.
          }
        },
        { label: "a.html-onCompleted",
          event: "onCompleted",
          details: {
            type: "main_frame",
            url: getURL("complexLoad/a.html"),
            fromCache: false,
            statusCode: 200,
            statusLine: "HTTP/1.1 200 OK",
            initiator: getDomain(initiators.BROWSER_INITIATED)
            // Request to chrome-extension:// url has no IP.
          }
        },
        { label: "b.html-onCompleted",
          event: "onCompleted",
          details: {
            type: "sub_frame",
            url: getURL("complexLoad/b.html"),
            fromCache: false,
            statusCode: 200,
            statusLine: "HTTP/1.1 200 OK",
            frameId: 1,
            parentFrameId: 0,
            initiator: getDomain(initiators.WEB_INITIATED)
            // Request to chrome-extension:// url has no IP.
          }
        },
        { label: "b.jpg-onCompleted",
          event: "onCompleted",
          details: {
            type: "image",
            url: getURL("complexLoad/b.jpg"),
            fromCache: false,
            statusCode: 200,
            statusLine: "HTTP/1.1 200 OK",
            frameId: 1,
            parentFrameId: 0,
            initiator: getDomain(initiators.WEB_INITIATED)
            // Request to chrome-extension:// url has no IP.
          }
        },
      ],
      [  // event order
        ["a.html-onBeforeRequest", "a.html-onResponseStarted",
         "b.html-onBeforeRequest", "b.html-onResponseStarted",
         "b.jpg-onBeforeRequest", "b.jpg-onResponseStarted" ],
        ["a.html-onResponseStarted", "a.html-onCompleted"],
        ["b.html-onResponseStarted", "b.html-onCompleted"],
        ["b.jpg-onResponseStarted", "b.jpg-onCompleted"] ]
      );
    navigateAndWait(getURL("complexLoad/a.html"));
  },

  // Loads several resources, but should only see the complexLoad main_frame
  // and image due to the filter.
  function complexLoadFiltered() {
    expect(
      [  // events
        { label: "a-onBeforeRequest",
          event: "onBeforeRequest",
          details: {
            type: "main_frame",
            url: getURL("complexLoad/a.html"),
            frameUrl: getURL("complexLoad/a.html"),
            initiator: getDomain(initiators.BROWSER_INITIATED)
          }
        },
        { label: "b-onBeforeRequest",
          event: "onBeforeRequest",
          details: {
            type: "image",
            url: getURL("complexLoad/b.jpg"),
            // As we do not listed to sub-frames we do not know the frameUrl.
            frameUrl: "unknown frame URL",
            frameId: 1,
            parentFrameId: 0,
            initiator: getDomain(initiators.WEB_INITIATED)
          }
        },
        { label: "a-onResponseStarted",
          event: "onResponseStarted",
          details: {
            type: "main_frame",
            url: getURL("complexLoad/a.html"),
            fromCache: false,
            statusCode: 200,
            statusLine: "HTTP/1.1 200 OK",
            initiator: getDomain(initiators.BROWSER_INITIATED)
            // Request to chrome-extension:// url has no IP.
          }
        },
        { label: "b-onResponseStarted",
          event: "onResponseStarted",
          details: {
            type: "image",
            url: getURL("complexLoad/b.jpg"),
            fromCache: false,
            statusCode: 200,
            statusLine: "HTTP/1.1 200 OK",
            frameId: 1,
            parentFrameId: 0,
            initiator: getDomain(initiators.WEB_INITIATED)
            // Request to chrome-extension:// url has no IP.
          }
        },
        { label: "a-onCompleted",
          event: "onCompleted",
          details: {
            type: "main_frame",
            url: getURL("complexLoad/a.html"),
            fromCache: false,
            statusCode: 200,
            statusLine: "HTTP/1.1 200 OK",
            initiator: getDomain(initiators.BROWSER_INITIATED)
            // Request to chrome-extension:// url has no IP.
          }
        },
        { label: "b-onCompleted",
          event: "onCompleted",
          details: {
            type: "image",
            url: getURL("complexLoad/b.jpg"),
            fromCache: false,
            statusCode: 200,
            statusLine: "HTTP/1.1 200 OK",
            frameId: 1,
            parentFrameId: 0,
            initiator: getDomain(initiators.WEB_INITIATED)
            // Request to chrome-extension:// url has no IP.
          }
        },
      ],
      [  // event order
        ["a-onBeforeRequest", "a-onResponseStarted",
         "b-onBeforeRequest", "b-onResponseStarted"],
        ["a-onResponseStarted", "a-onCompleted"],
        ["b-onResponseStarted", "b-onCompleted"] ],
      {  // filters
        urls: [getURL("complexLoad/*")],
        types: ["main_frame", "image"],
        tabId: tabId
      });
    chrome.tabs.create({ url: getURL("simpleLoad/a.html") },
        function(newTab) {
      chrome.tabs.remove(newTab.id);
      navigateAndWait(getURL("complexLoad/a.html"));
    });
  },

  // Navigates to a page to generates an XHR.
  function xhrLoad() {
    expect(
      [  // events
        { label: "onBeforeRequest-1",
          event: "onBeforeRequest",
          details: {
            type: "main_frame",
            url: getURLHttpXHR(),
            frameUrl: getURLHttpXHR(),
            initiator: getServerDomain(initiators.BROWSER_INITIATED)
          }
        },
        { label: "onBeforeSendHeaders-1",
          event: "onBeforeSendHeaders",
          details: {
            type: "main_frame",
            url: getURLHttpXHR(),
            initiator: getServerDomain(initiators.BROWSER_INITIATED)
          }
        },
        { label: "onSendHeaders-1",
          event: "onSendHeaders",
          details: {
            type: "main_frame",
            url: getURLHttpXHR(),
            initiator: getServerDomain(initiators.BROWSER_INITIATED)
          }
        },
        { label: "onHeadersReceived-1",
          event: "onHeadersReceived",
          details: {
            type: "main_frame",
            url: getURLHttpXHR(),
            statusLine: "HTTP/1.1 200 OK",
            statusCode: 200,
            initiator: getServerDomain(initiators.BROWSER_INITIATED)
          }
        },
        { label: "onResponseStarted-1",
          event: "onResponseStarted",
          details: {
            type: "main_frame",
            url: getURLHttpXHR(),
            statusCode: 200,
            ip: "127.0.0.1",
            fromCache: false,
            statusLine: "HTTP/1.1 200 OK",
            initiator: getServerDomain(initiators.BROWSER_INITIATED)
          }
        },
        { label: "onCompleted-1",
          event: "onCompleted",
          details: {
            type: "main_frame",
            url: getURLHttpXHR(),
            statusCode: 200,
            ip: "127.0.0.1",
            fromCache: false,
            statusLine: "HTTP/1.1 200 OK",
            initiator: getServerDomain(initiators.BROWSER_INITIATED)
          }
        },
        { label: "a.js-onBeforeRequest",
          event: "onBeforeRequest",
          details: {
            type: "script",
            url: getURLHttpXHRJavaScript(),
            frameUrl: getURLHttpXHR(),
            initiator: getServerDomain(initiators.WEB_INITIATED)
          }
        },
        { label: "a.js-onBeforeSendHeaders",
          event: "onBeforeSendHeaders",
          details: {
            type: "script",
            url: getURLHttpXHRJavaScript(),
            initiator: getServerDomain(initiators.WEB_INITIATED)
          }
        },
        { label: "a.js-onSendHeaders",
          event: "onSendHeaders",
          details: {
            type: "script",
            url: getURLHttpXHRJavaScript(),
            initiator: getServerDomain(initiators.WEB_INITIATED)
          }
        },
        { label: "a.js-onHeadersReceived",
          event: "onHeadersReceived",
          details: {
            type: "script",
            url: getURLHttpXHRJavaScript(),
            statusLine: "HTTP/1.1 200 OK",
            statusCode: 200,
            initiator: getServerDomain(initiators.WEB_INITIATED)
          }
        },
        { label: "a.js-onResponseStarted",
          event: "onResponseStarted",
          details: {
            type: "script",
            url: getURLHttpXHRJavaScript(),
            statusCode: 200,
            ip: "127.0.0.1",
            fromCache: false,
            statusLine: "HTTP/1.1 200 OK",
            initiator: getServerDomain(initiators.WEB_INITIATED)
          }
        },
        { label: "a.js-onCompleted",
          event: "onCompleted",
          details: {
            type: "script",
            url: getURLHttpXHRJavaScript(),
            statusCode: 200,
            ip: "127.0.0.1",
            fromCache: false,
            statusLine: "HTTP/1.1 200 OK",
            initiator: getServerDomain(initiators.WEB_INITIATED)
          }
        },
        { label: "onBeforeRequest-2",
          event: "onBeforeRequest",
          details: {
            type: "xmlhttprequest",
            url: getURLHttpXHRData(),
            frameUrl: getURLHttpXHR(),
            initiator: getServerDomain(initiators.WEB_INITIATED)
          }
        },
        { label: "onBeforeSendHeaders-2",
          event: "onBeforeSendHeaders",
          details: {
            type: "xmlhttprequest",
            url: getURLHttpXHRData(),
            initiator: getServerDomain(initiators.WEB_INITIATED)
          }
        },
        { label: "onSendHeaders-2",
          event: "onSendHeaders",
          details: {
            type: "xmlhttprequest",
            url: getURLHttpXHRData(),
            initiator: getServerDomain(initiators.WEB_INITIATED)
          }
        },
        { label: "onHeadersReceived-2",
          event: "onHeadersReceived",
          details: {
            type: "xmlhttprequest",
            url: getURLHttpXHRData(),
            statusLine: "HTTP/1.1 200 OK",
            statusCode: 200,
            initiator: getServerDomain(initiators.WEB_INITIATED)
          }
        },
        { label: "onResponseStarted-2",
          event: "onResponseStarted",
          details: {
            type: "xmlhttprequest",
            url: getURLHttpXHRData(),
            statusCode: 200,
            ip: "127.0.0.1",
            fromCache: false,
            statusLine: "HTTP/1.1 200 OK",
            initiator: getServerDomain(initiators.WEB_INITIATED)
          }
        },
        { label: "onCompleted-2",
          event: "onCompleted",
          details: {
            type: "xmlhttprequest",
            url: getURLHttpXHRData(),
            statusCode: 200,
            ip: "127.0.0.1",
            fromCache: false,
            statusLine: "HTTP/1.1 200 OK",
            initiator: getServerDomain(initiators.WEB_INITIATED)
          }
        }
      ],
      [  // event order
        ["onBeforeRequest-1", "onBeforeSendHeaders-1", "onSendHeaders-1",
         "onHeadersReceived-1", "onResponseStarted-1", "onCompleted-1",
         "onBeforeRequest-2", "onBeforeSendHeaders-2", "onSendHeaders-2",
         "onHeadersReceived-2", "onResponseStarted-2", "onCompleted-2"] ]);
    navigateAndWait(getURLHttpXHR());
  },
]);
