summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/battery-status
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/battery-status')
-rw-r--r--testing/web-platform/tests/battery-status/OWNERS3
-rw-r--r--testing/web-platform/tests/battery-status/battery-charging-manual.html52
-rw-r--r--testing/web-platform/tests/battery-status/battery-discharging-manual.html52
-rw-r--r--testing/web-platform/tests/battery-status/battery-full-manual.html42
-rw-r--r--testing/web-platform/tests/battery-status/battery-interface-idlharness.html74
-rw-r--r--testing/web-platform/tests/battery-status/battery-plugging-in-manual.html125
-rw-r--r--testing/web-platform/tests/battery-status/battery-promise-iframe.html80
-rw-r--r--testing/web-platform/tests/battery-status/battery-promise-window.html28
-rw-r--r--testing/web-platform/tests/battery-status/battery-promise.html19
-rw-r--r--testing/web-platform/tests/battery-status/battery-unplugging-manual.html110
-rw-r--r--testing/web-platform/tests/battery-status/support-iframe-initial.html5
-rw-r--r--testing/web-platform/tests/battery-status/support-iframe.html5
-rw-r--r--testing/web-platform/tests/battery-status/support-window-open.html10
13 files changed, 605 insertions, 0 deletions
diff --git a/testing/web-platform/tests/battery-status/OWNERS b/testing/web-platform/tests/battery-status/OWNERS
new file mode 100644
index 000000000..eb86aa069
--- /dev/null
+++ b/testing/web-platform/tests/battery-status/OWNERS
@@ -0,0 +1,3 @@
+@anssiko
+@dontcallmedom
+@zqzhang
diff --git a/testing/web-platform/tests/battery-status/battery-charging-manual.html b/testing/web-platform/tests/battery-status/battery-charging-manual.html
new file mode 100644
index 000000000..8e80e30a2
--- /dev/null
+++ b/testing/web-platform/tests/battery-status/battery-charging-manual.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Battery Test: battery neither empty or full, charger plugged in</title>
+<meta name="flags" content="interact">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<h2>Description</h2>
+<p>
+ This test validates that all of the BatteryManager attributes exist and are set to their correct values when battery is charging.
+</p>
+
+<h2>Preconditions</h2>
+<ol>
+ <li>
+ The device is plugged in to the charger before this test is run.
+ </li>
+ <li>
+ The battery must neither be empty or full, nor reach empty or full capacity during the test.
+ </li>
+ <li>
+ Waiting for battery level change to fire levelchange event, maybe need a long time
+ </li>
+</ol>
+
+<script>
+
+setup({ explicit_timeout: true });
+
+async_test(function (t) {
+ navigator.getBattery().then(function (battery) {
+ t.step(function () {
+ assert_true(battery.charging, 'charging must be set to true');
+ assert_equals(battery.dischargingTime, Infinity, 'dischargingTime must be set to Infinity');
+ assert_greater_than(battery.level, 0, 'level must be greater than 0');
+ assert_less_than_equal(battery.level, 1.0, 'level must be less than or equal to 1.0');
+
+ var battery_level = battery.level;
+ battery.onlevelchange = t.step_func(function () {
+ assert_greater_than(battery.level, battery_level, 'The value of the level attribute must increase');
+ t.done();
+ });
+ });
+ }, function (error) {
+ t.step(function () {
+ assert_unreached(error.message);
+ });
+ t.done();
+ });
+}, document.title);
+
+</script>
diff --git a/testing/web-platform/tests/battery-status/battery-discharging-manual.html b/testing/web-platform/tests/battery-status/battery-discharging-manual.html
new file mode 100644
index 000000000..c4ccbe445
--- /dev/null
+++ b/testing/web-platform/tests/battery-status/battery-discharging-manual.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Battery Test: battery neither empty or full, charger unplugged in</title>
+<meta name="flags" content="interact">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<h2>Description</h2>
+<p>
+ This test validates that all of the BatteryManager attributes exist and are set to their correct values when battery is discharging.
+</p>
+
+<h2>Preconditions</h2>
+<ol>
+ <li>
+ The device is unplugged from the charger before this test is run.
+ </li>
+ <li>
+ The battery must neither be empty or full, nor reach empty or full capacity during the test.
+ </li>
+ <li>
+ Waiting for battery level change to fire levelchange event, maybe need a long time
+ </li>
+</ol>
+
+<script>
+
+setup({ explicit_timeout: true });
+
+async_test(function (t) {
+ navigator.getBattery().then(function (battery) {
+ t.step(function () {
+ assert_false(battery.charging, 'charging must be set to false');
+ assert_equals(battery.chargingTime, Infinity, 'chargingTime must be set to Infinity');
+ assert_greater_than(battery.level, 0, 'level must be greater than 0');
+ assert_less_than_equal(battery.level, 1.0, 'level must be less than or equal to 1.0');
+
+ var battery_level = battery.level;
+ battery.onlevelchange = t.step_func(function () {
+ assert_less_than(battery.level, battery_level, 'The value of the level attribute must decrease');
+ t.done();
+ });
+ });
+ }, function (error) {
+ t.step(function () {
+ assert_unreached(error.message);
+ });
+ t.done();
+ });
+}, document.title);
+
+</script>
diff --git a/testing/web-platform/tests/battery-status/battery-full-manual.html b/testing/web-platform/tests/battery-status/battery-full-manual.html
new file mode 100644
index 000000000..883d71f40
--- /dev/null
+++ b/testing/web-platform/tests/battery-status/battery-full-manual.html
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Battery Test: battery full, charger plugged in</title>
+<meta name="flags" content="interact">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<h2>Description</h2>
+<p>
+ This test validates that all of the BatteryManager attributes exist and are set to their correct values when battery is full.
+</p>
+
+<h2>Preconditions</h2>
+<ol>
+ <li>
+ The device is plugged in to the charger before this test is run.
+ </li>
+ <li>
+ The battery is full.
+ </li>
+</ol>
+
+<script>
+
+async_test(function (t) {
+ navigator.getBattery().then(function (battery) {
+ t.step(function () {
+ assert_true(battery.charging, 'charging must be set to true');
+ assert_equals(battery.chargingTime, 0, 'chargingTime must be set to 0');
+ assert_equals(battery.dischargingTime, Infinity, 'dischargingTime must be set to Infinity');
+ assert_equals(battery.level, 1.0, 'level must be set to 1.0');
+ });
+ t.done();
+ }, function (error) {
+ t.step(function () {
+ assert_unreached(error.message);
+ });
+ t.done();
+ });
+}, document.title);
+
+</script>
diff --git a/testing/web-platform/tests/battery-status/battery-interface-idlharness.html b/testing/web-platform/tests/battery-status/battery-interface-idlharness.html
new file mode 100644
index 000000000..4e9b209d4
--- /dev/null
+++ b/testing/web-platform/tests/battery-status/battery-interface-idlharness.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Battery test: IDL</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/WebIDLParser.js"></script>
+<script src="/resources/idlharness.js"></script>
+<script type="text/plain" class="untested">
+interface Navigator { };
+
+interface EventTarget {
+ void addEventListener(DOMString type, EventListener? callback, optional boolean capture);
+ void removeEventListener(DOMString type, EventListener? callback, optional boolean capture);
+ boolean dispatchEvent(Event event);
+};
+
+[Callback]
+interface EventListener {
+ void handleEvent(Event event);
+};
+[TreatNonObjectAsNull]
+callback EventHandlerNonNull = any (Event event);
+typedef EventHandlerNonNull? EventHandler;
+</script>
+<script type="text/plain">
+partial interface Navigator {
+ Promise<BatteryManager> getBattery ();
+};
+
+interface BatteryManager : EventTarget {
+ readonly attribute boolean charging;
+ readonly attribute unrestricted double chargingTime;
+ readonly attribute unrestricted double dischargingTime;
+ readonly attribute double level;
+ attribute EventHandler onchargingchange;
+ attribute EventHandler onchargingtimechange;
+ attribute EventHandler ondischargingtimechange;
+ attribute EventHandler onlevelchange;
+};
+</script>
+<script>
+"use strict";
+var t = async_test();
+var idl_array = new IdlArray();
+var idls;
+var manager;
+[].forEach.call(document.querySelectorAll('script[type=text\\/plain]'), function(node) {
+ idls = node.textContent;
+ idl_array[(node.className === 'untested') ? 'add_untested_idls' : 'add_idls'](idls);
+});
+t.step(function() {
+ assert_idl_attribute(navigator, 'getBattery', 'navigator must have getBattery attribute');
+ navigator.getBattery().then(function(bm) {
+ manager = bm;
+ idl_array.add_objects({Navigator: ['navigator'], BatteryManager: ['manager']});
+ idl_array.test();
+ t.done();
+ }).catch(function(err) {
+ t.assert_unreached("navigator.getBattery failed");
+ });
+});
+</script>
+
+<h2>Description</h2>
+<p>
+ This test validates the BatteryManager interface IDL.
+</p>
+<p>
+ This test uses <a href="/resources/idlharness.js">idlharness.js</a>, and
+ is complementary to the <a href="battery-interface.html">battery-interface.html</a>
+ test.
+</p>
+
+<div id="log"></div>
diff --git a/testing/web-platform/tests/battery-status/battery-plugging-in-manual.html b/testing/web-platform/tests/battery-status/battery-plugging-in-manual.html
new file mode 100644
index 000000000..4d16cf187
--- /dev/null
+++ b/testing/web-platform/tests/battery-status/battery-plugging-in-manual.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Battery Test: battery not full, charger plugging in</title>
+<meta name="flags" content="interact">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ #note {
+ background-color: #fef1b5;
+ border: solid 1px #cdab2d;
+ padding: 5px;
+ margin: 15px;
+ display: block;
+ }
+</style>
+
+<h2>Description</h2>
+<p>
+ This test validates that all of the BatteryManager attributes exist and
+ are set to correct values, with corresponding events fired,
+ when the charger is plugged in.
+</p>
+
+<h2>Preconditions</h2>
+<ol>
+ <li>
+ The device is unplugged from the charger before this test is run.
+ </li>
+ <li>
+ The battery must not be full or reach full capacity before the time the test is run.
+ </li>
+</ol>
+
+<div id="note">
+ <ol>
+ <li>
+ Plug in the charger and wait for all the tests to complete.
+ </li>
+ <li>
+ The tests may take long time since the definition of how
+ often the chargingtimechange, dischargingtimechange, and levelchange
+ events are fired is left to the implementation.
+ </li>
+ </ol>
+</div>
+
+<div id="log"></div>
+
+<script>
+
+(function() {
+
+ setup({ explicit_timeout: true });
+
+ var onchargingchange_test = async_test(
+ 'When the device is plugged in and its charging state is updated, ' +
+ 'must set the charging attribute\'s value to true and ' +
+ 'fire a chargingchange event.');
+ var onchargingtimechange_test = async_test(
+ 'When the device is plugged in and its charging time is updated, ' +
+ 'must set the chargingTime attribute\'s value and fire ' +
+ 'a chargingtimechange event.');
+ var ondischargingtimechange_test = async_test(
+ 'When the device is plugged in and its discharging time is updated, ' +
+ 'must set the dischargingTime attribute\'s value to Infinity and ' +
+ 'fire a dischargingtimechange event.');
+ var onlevelchange_test = async_test(
+ 'When the device is plugged in and the battery level is updated, ' +
+ 'must set the level attribute\'s value and fire a levelchange event.');
+
+ var batterySuccess = function (battery) {
+ battery.onchargingchange = onchargingchange_test.step_func(function () {
+ assert_true(battery.charging, 'The charging attribute must be set to true.');
+ onchargingchange_test.done();
+ });
+
+ var battery_chargingtime = battery.chargingTime;
+ battery.onchargingtimechange = onchargingtimechange_test.step_func(function () {
+ assert_less_than(battery.chargingTime, battery_chargingtime,
+ 'The value of the chargingTime attribute must decrease.');
+ onchargingtimechange_test.done();
+ });
+
+ battery.ondischargingtimechange = ondischargingtimechange_test.step_func(function () {
+ if (battery.charging) {
+ assert_equals(battery.dischargingTime, Infinity,
+ 'The value of the dischargingTime attribute must be set to Infinity.');
+ ondischargingtimechange_test.done();
+ }
+ });
+
+ battery.onlevelchange = onlevelchange_test.step_func(function () {
+ assert_greater_than(battery.level, 0);
+ assert_less_than_equal(battery.level, 1.0);
+ onlevelchange_test.done();
+ });
+ };
+
+ var batteryFailure = function (error) {
+ onchargingchange_test.step(function () {
+ assert_unreached(error.message);
+ });
+ onchargingchange_test.done();
+
+ onchargingtimechange_test.step(function () {
+ assert_unreached(error.message);
+ });
+ onchargingtimechange_test.done();
+
+ ondischargingtimechange_test.step(function () {
+ assert_unreached(error.message);
+ });
+ ondischargingtimechange_test.done();
+
+ onlevelchange_test.step(function () {
+ assert_unreached(error.message);
+ });
+ onlevelchange_test.done();
+ };
+
+ navigator.getBattery().then(batterySuccess, batteryFailure);
+
+})();
+
+</script>
diff --git a/testing/web-platform/tests/battery-status/battery-promise-iframe.html b/testing/web-platform/tests/battery-status/battery-promise-iframe.html
new file mode 100644
index 000000000..6add86106
--- /dev/null
+++ b/testing/web-platform/tests/battery-status/battery-promise-iframe.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Battery Test: iframe has a different Navigator object</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ iframe {
+ display: none;
+ }
+</style>
+<div id="log"></div>
+<iframe id="blank" src="about:blank"></iframe>
+<iframe id="frame"></iframe>
+<script>
+promise_test(function(t) {
+ var iframe = document.querySelector('#blank');
+ var originalPromise = navigator.getBattery();
+
+ return originalPromise.then(function(originalManager) {
+ var promise = iframe.contentWindow.navigator.getBattery();
+
+ assert_true(originalManager instanceof BatteryManager);
+ assert_not_equals(iframe.contentWindow.navigator,
+ navigator,
+ 'navigator objects shall be different');
+ assert_not_equals(promise,
+ originalPromise,
+ 'battery promises in different navigators shall be different');
+ assert_equals(iframe.contentWindow.navigator.getBattery(),
+ promise,
+ 'battery promises in same navigator shall be same');
+
+ return promise;
+ }).then(function(manager) {
+ assert_equals(manager.__proto__,
+ iframe.contentWindow.BatteryManager.prototype);
+ assert_true(manager instanceof iframe.contentWindow.BatteryManager);
+ });
+
+}, 'iframe has a different Navigator object thus getting another battery promise');
+
+async_test(function (t) {
+ var iframe = document.querySelector('#blank');
+ var originalNavigator = iframe.contentWindow.navigator;
+ var originalPromise = iframe.contentWindow.navigator.getBattery();
+
+ iframe.onload = t.step_func(function() {
+ assert_equals(iframe.contentWindow.navigator,
+ originalNavigator,
+ 'navigator objects shall be same');
+ assert_equals(iframe.contentWindow.navigator.getBattery(),
+ originalPromise,
+ 'battery status promises shall be same');
+ t.done();
+ });
+
+ iframe.src = 'support-iframe.html';
+}, 'setting src of an iframe with initial about:blank makes same Navigator object and battery promise');
+
+async_test(function (t) {
+ var iframe = document.querySelector('#frame');
+ iframe.src = 'support-iframe-initial.html';
+ iframe.onload = t.step_func(function() {
+ var originalNavigator = iframe.contentWindow.navigator;
+ var originalPromise = iframe.contentWindow.navigator.getBattery();
+
+ iframe.onload = t.step_func(function() {
+ assert_not_equals(iframe.contentWindow.navigator,
+ originalNavigator,
+ 'navigator objects shall be changed');
+ assert_not_equals(iframe.contentWindow.navigator.getBattery(),
+ originalPromise,
+ 'battery status promises shall be different');
+ t.done();
+ });
+
+ iframe.src = 'support-iframe.html';
+ });
+}, 'setting src of an iframe with initial frame makes its Navigator object vary thus getting another battery promise');
+</script>
diff --git a/testing/web-platform/tests/battery-status/battery-promise-window.html b/testing/web-platform/tests/battery-status/battery-promise-window.html
new file mode 100644
index 000000000..a7d708c05
--- /dev/null
+++ b/testing/web-platform/tests/battery-status/battery-promise-window.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Battery Test: window.open() makes a different Navigator object</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ #note {
+ background-color: #fef1b5;
+ border: solid 1px #cdab2d;
+ padding: 5px;
+ margin: 15px;
+ display: block;
+ }
+</style>
+<div id="note">
+ Allow pop-up windows before running the tests.
+</div>
+<div id="log"></div>
+<script>
+async_test(function (t) {
+ var win = window.open('support-window-open.html');
+ window.onmessage = t.step_func(function(e) {
+ assert_array_equals(e.data, [false, false, true]);
+ win.close();
+ t.done();
+ });
+}, 'window.open() makes a different Navigator object thus getting another battery promise');
+</script>
diff --git a/testing/web-platform/tests/battery-status/battery-promise.html b/testing/web-platform/tests/battery-status/battery-promise.html
new file mode 100644
index 000000000..8c552eb3f
--- /dev/null
+++ b/testing/web-platform/tests/battery-status/battery-promise.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Battery Test: navigator.getBattery() always return same battery promise</title>
+<link rel="author" title="YuichiNukiyama" href="https://github.com/YuichiNukiyama">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+promise_test(function () {
+ return navigator.getBattery().then(function (result) {
+ assert_class_string(result, 'BatteryManager',
+ 'getBattery should return BatteryManager Object.');
+ });
+}, 'navigator.getBattery() shall return BatteryManager as a promise');
+
+test(function () {
+ assert_equals(navigator.getBattery(), navigator.getBattery());
+}, 'navigator.getBattery() shall always return the same promise');
+</script>
diff --git a/testing/web-platform/tests/battery-status/battery-unplugging-manual.html b/testing/web-platform/tests/battery-status/battery-unplugging-manual.html
new file mode 100644
index 000000000..bb576da2b
--- /dev/null
+++ b/testing/web-platform/tests/battery-status/battery-unplugging-manual.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Battery Test: charger unplugging</title>
+<meta name="flags" content="interact">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ #note {
+ background-color: #fef1b5;
+ border: solid 1px #cdab2d;
+ padding: 5px;
+ margin: 15px;
+ display: block;
+ }
+</style>
+
+<h2>Description</h2>
+<p>
+ This test validates that all of the BatteryManager attributes exist and
+ are set to correct values, with corresponding events fired,
+ when the charger is unplugged.
+</p>
+
+<h2>Preconditions</h2>
+<ol>
+ <li>
+ The device is plugged in to the charger before this test is run.
+ </li>
+</ol>
+
+<div id="note">
+ Unplug the charger and wait for all the tests to complete.
+</div>
+
+<div id="log"></div>
+
+<script>
+
+(function() {
+
+ setup({ explicit_timeout: true });
+
+ var onchargingchange_test = async_test(
+ 'When the device is unplugged in and its charging state is updated, ' +
+ 'must set the charging attribute\'s value to false and ' +
+ 'fire a chargingchange event.');
+ var onchargingtimechange_test = async_test(
+ 'When the device is unplugged in and its charging time is updated, ' +
+ 'must set the chargingTime attribute\'s value to Infinity and ' +
+ 'fire a chargingtimechange event.');
+ var ondischargingtimechange_test = async_test(
+ 'When the device is unplugged in and its discharging time is updated, ' +
+ 'must set the dischargingTime attribute\'s value and ' +
+ 'fire a dischargingtimechange event.');
+ var onlevelchange_test = async_test(
+ 'When the device is unplugged in and the battery level is updated, ' +
+ 'must set the level attribute\'s value and fire a levelchange event.');
+
+ var batterySuccess = function (battery) {
+ battery.onchargingchange = onchargingchange_test.step_func(function () {
+ assert_false(battery.charging, 'The charging attribute must be set to false.');
+ onchargingchange_test.done();
+ });
+
+ battery.onchargingtimechange = onchargingtimechange_test.step_func(function () {
+ assert_equals(battery.chargingTime, Infinity,
+ 'The value of the chargingTime attribute must be set to Infinity.');
+ onchargingtimechange_test.done();
+ });
+
+ battery.ondischargingtimechange = ondischargingtimechange_test.step_func(function () {
+ assert_less_than(battery.dischargingTime, Infinity,
+ 'The value of the dischargingTime attribute must be set to the remaining discharging time.');
+ ondischargingtimechange_test.done();
+ });
+
+ battery.onlevelchange = onlevelchange_test.step_func(function () {
+ assert_greater_than(battery.level, 0);
+ assert_less_than_equal(battery.level, 1.0);
+ onlevelchange_test.done();
+ });
+ };
+
+ var batteryFailure = function (error) {
+ onchargingchange_test.step(function () {
+ assert_unreached(error.message);
+ });
+ onchargingchange_test.done();
+
+ onchargingtimechange_test.step(function () {
+ assert_unreached(error.message);
+ });
+ onchargingtimechange_test.done();
+
+ ondischargingtimechange_test.step(function () {
+ assert_unreached(error.message);
+ });
+ ondischargingtimechange_test.done();
+
+ onlevelchange_test.step(function () {
+ assert_unreached(error.message);
+ });
+ onlevelchange_test.done();
+ };
+
+ navigator.getBattery().then(batterySuccess, batteryFailure);
+
+})();
+
+</script>
diff --git a/testing/web-platform/tests/battery-status/support-iframe-initial.html b/testing/web-platform/tests/battery-status/support-iframe-initial.html
new file mode 100644
index 000000000..d4e5b31f1
--- /dev/null
+++ b/testing/web-platform/tests/battery-status/support-iframe-initial.html
@@ -0,0 +1,5 @@
+<!DOCTYPE HTML>
+<meta charset="utf-8">
+<div>
+Hello!
+</div>
diff --git a/testing/web-platform/tests/battery-status/support-iframe.html b/testing/web-platform/tests/battery-status/support-iframe.html
new file mode 100644
index 000000000..d4e5b31f1
--- /dev/null
+++ b/testing/web-platform/tests/battery-status/support-iframe.html
@@ -0,0 +1,5 @@
+<!DOCTYPE HTML>
+<meta charset="utf-8">
+<div>
+Hello!
+</div>
diff --git a/testing/web-platform/tests/battery-status/support-window-open.html b/testing/web-platform/tests/battery-status/support-window-open.html
new file mode 100644
index 000000000..afffc3af2
--- /dev/null
+++ b/testing/web-platform/tests/battery-status/support-window-open.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML>
+<meta charset="utf-8">
+<script>
+var data = [
+ navigator === window.opener.navigator,
+ navigator.getBattery() === window.opener.navigator.getBattery(),
+ navigator.getBattery() === navigator.getBattery()
+];
+window.opener.postMessage(data, '*');
+</script>