<!DOCTYPE html>
<!--
Copyright 2020 The Cobalt Authors. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<html>
<meta charset="utf-8">
<title>test</title>
<script>
  var changeChannel = setInterval(tryChangeChannel, 500);

  function tryChangeChannel() {
    const channel = window.h5vcc.updater.getUpdaterChannel();
    const status = window.h5vcc.updater.getUpdateStatus();

    if (channel == "") {
      return;
    }

    if (channel == "qa") {
      if ((status == "App is up to date") || (status == "Update installed, pending restart")) {
        window.h5vcc.updater.setUpdaterChannel("test");
        console.log("channel was changed to test");
        return;
      }
    }

    if ((channel == "test") && (status == "Update installed, pending restart")) {
      console.log("update from test channel installed");
      clearInterval(changeChannel);
    }
  }
</script>
</html>
