<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>slave for sessionStorage test</title>

<script type="text/javascript" src="interOriginFrame.js"></script>
<script type="text/javascript">

const DOM_QUOTA_EXCEEDED_ERR = 0x80530016;

function checkException(func, exc)
{
  var exceptionThrew = false;
  try {
    func();
  }
  catch (ex) {
    exceptionThrew = true;
    is(ex.result, exc, "Expected "+exc+" exception");
  }
  ok(exceptionThrew, "Exception "+exc+" threw at "+location);
}

function doStep()
{
  var query = location.search.substring(1);
  var queries = query.split("&");

  var operation = queries[0];
  var keyName = queries[1];
  var result = queries[2];

  switch (result)
  {
    case "success":
      switch (operation)
      {
        case "add":
          // Store 500 bytes long string must succeed
          localStorage.setItem(keyName, "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
          is(localStorage.getItem(keyName), "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", "500 bytes key "+keyName+" stored");
          break;

        case "remove":
          localStorage.removeItem(keyName);
          is(localStorage.getItem(keyName), null, "Key "+keyName+" removed");
          break;
      }

      break;

    case "failure":
      switch (operation)
      {
        case "add":
          // Attempt to store 500 bytes long string that doens't
          // fit the quota, have to throw DOM_QUOTA_EXCEEDED_ERR exception
          checkException(function() {
            localStorage.setItem(keyName, "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
          }, DOM_QUOTA_EXCEEDED_ERR);
          is(localStorage.getItem(keyName), null, "500 bytes key "+keyName+" is NOT stored");
          break;

        case "add2":
          // Attempt to change a key value to reach the DOM quota and
          // check it fails and the old key value is still present.
          checkException(function() {
            localStorage.setItem(keyName, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
          }, DOM_QUOTA_EXCEEDED_ERR);
          is(localStorage.getItem(keyName), "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", "Key "+keyName+" left unchanged");
          break;
      }

      break;

    case "":
    default:
      switch (operation)
      {
        case "clear":
          localStorage.clear();
          break;
      }

      break;
  }

  // Just inform the master we are finished now
  postMsg("done");
  return false;
}

function startTest() {
  postMsg('frame loaded');
}
</script>

</head>

<body onload="startTest();">
</body>
</html>
