<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>fxa_web_channel_test</title>
</head>
<body>
<script>
  var webChannelId = "account_updates_test";

  window.onload = function() {
    var testName = window.location.search.replace(/^\?/, "");

    switch (testName) {
      case "profile_change":
        test_profile_change();
        break;
      case "login":
        test_login();
        break;
      case "can_link_account":
        test_can_link_account();
        break;
      case "logout":
        test_logout();
        break;
      case "delete":
        test_delete();
        break;
      case "firefox_view":
        test_firefox_view();
        break;
    }
  };

  function test_profile_change() {
    var event = new window.CustomEvent("WebChannelMessageToChrome", {
      detail: JSON.stringify({
        id: webChannelId,
        message: {
          command: "profile:change",
          data: {
            uid: "abc123",
          },
        },
      }),
    });

    window.dispatchEvent(event);
  }

  function test_login() {
    var event = new window.CustomEvent("WebChannelMessageToChrome", {
      detail: JSON.stringify({
        id: webChannelId,
        message: {
          command: "fxaccounts:login",
          data: {
            authAt: Date.now(),
            email: "testuser@testuser.com",
            keyFetchToken: "key_fetch_token",
            sessionToken: "session_token",
            uid: "uid",
            unwrapBKey: "unwrap_b_key",
            verified: true,
          },
          messageId: 1,
        },
      }),
    });

    window.dispatchEvent(event);
  }

  function test_can_link_account() {
    window.addEventListener("WebChannelMessageToContent", function(e) {
      // echo any responses from the browser back to the tests on the
      // fxaccounts_webchannel_response_echo WebChannel. The tests are
      // listening for events and do the appropriate checks.
      var event = new window.CustomEvent("WebChannelMessageToChrome", {
        detail: JSON.stringify({
          id: "fxaccounts_webchannel_response_echo",
          message: e.detail.message,
        }),
      });

      window.dispatchEvent(event);
    }, true);

    var event = new window.CustomEvent("WebChannelMessageToChrome", {
      detail: JSON.stringify({
        id: webChannelId,
        message: {
          command: "fxaccounts:can_link_account",
          data: {
            email: "testuser@testuser.com",
          },
          messageId: 2,
        },
      }),
    });

    window.dispatchEvent(event);
  }

  function test_logout() {
    var event = new window.CustomEvent("WebChannelMessageToChrome", {
      detail: JSON.stringify({
        id: webChannelId,
        message: {
          command: "fxaccounts:logout",
          data: {
            uid: "uid",
          },
          messageId: 3,
        },
      }),
    });

    window.dispatchEvent(event);
  }

  function test_delete() {
    var event = new window.CustomEvent("WebChannelMessageToChrome", {
      detail: JSON.stringify({
        id: webChannelId,
        message: {
          command: "fxaccounts:delete",
          data: {
            uid: "uid",
          },
          messageId: 4,
        },
      }),
    });

    window.dispatchEvent(event);
  }

  function test_firefox_view() {
    var event = new window.CustomEvent("WebChannelMessageToChrome", {
      detail: JSON.stringify({
        id: webChannelId,
        message: {
          command: "fxaccounts:firefox_view",
          data: {
            uid: "uid",
          },
          messageId: 5,
        },
      }),
    });

    window.dispatchEvent(event);
  }
</script>
</body>
</html>
