-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Prototype of the "Set Timezone WebDrive extension"
This CL is NOT intended to be merge into chromium. I just want to use the chromium tryBot to validate the code is correct. The WPT PR is in #26555 Bug: 1144403 Change-Id: Ie3c062d1d9e59ee3f9087c7af99df7d2d29b056d
- Loading branch information
1 parent
7647a1f
commit 1c9ddd6
Showing
20 changed files
with
432 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
<!DOCTYPE html> | ||
<meta charset="utf-8"> | ||
<title>TestDriver set_time_zone method</title> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="/resources/testdriver.js"></script> | ||
<script src="/resources/testdriver-vendor.js"></script> | ||
|
||
<script> | ||
function defaultTimeZone() { | ||
return (new Intl.DateTimeFormat()).resolvedOptions().timeZone; | ||
} | ||
async_test(t => { | ||
let timeZone = "Asia/Taipei"; | ||
test_driver | ||
.set_time_zone(timeZone) | ||
.then(() => { | ||
assert_equals(defaultTimeZone(), timeZone); | ||
t.done() | ||
}) | ||
.catch(() => assert_unreached("set_time_zone failed")); | ||
}); | ||
</script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
14 changes: 14 additions & 0 deletions
14
service-workers/timezonechange/resources/service-worker-timezonechange.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
self.addEventListener('message', function(e) { | ||
const message = e.data; | ||
if ('port' in message) { | ||
const port = message.port; | ||
const oldTimeZone = | ||
(new Intl.DateTimeFormat()).resolvedOptions().timeZone; | ||
self.addEventListener('timezonechange', function(evt) { | ||
const newTimeZone = | ||
(new Intl.DateTimeFormat()).resolvedOptions().timeZone; | ||
port.postMessage('SUCCESS:' + newTimeZone); | ||
}); | ||
port.postMessage('READY:' + oldTimeZone); | ||
} | ||
}); |
51 changes: 51 additions & 0 deletions
51
service-workers/timezonechange/service-worker-timezonechange.https.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
<!DOCTYPE html> | ||
<title>Service Worker: timezonechange event</title> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="/resources/testdriver.js"></script> | ||
<script src="/resources/testdriver-vendor.js"></script> | ||
<script src="../service-worker/resources/test-helpers.sub.js"></script> | ||
<script> | ||
|
||
function defaultTimeZone() { | ||
return (new Intl.DateTimeFormat()).resolvedOptions().timeZone; | ||
} | ||
|
||
promise_test(async t => { | ||
const oldTimeZone = "Pacific/Fakaofo"; | ||
const newTimeZone = "Asia/Taipei"; | ||
// First, we set to a fixed time zone. | ||
await window.test_driver.set_time_zone(oldTimeZone); | ||
assert_equals(defaultTimeZone(), oldTimeZone); | ||
|
||
const script = 'resources/service-worker-timezonechange.js'; | ||
const scope = 'resources/blank.html'; | ||
let worker; | ||
let port; | ||
|
||
return service_worker_unregister_and_register(t, script, scope) | ||
.then(registration => { | ||
t.add_cleanup(() => registration.unregister()); | ||
worker = registration.installing; | ||
|
||
const messageChannel = new MessageChannel(); | ||
port = messageChannel.port1; | ||
return new Promise(resolve => { | ||
port.onmessage = resolve; | ||
worker.postMessage({port: messageChannel.port2}, | ||
[messageChannel.port2]); | ||
}); | ||
}) | ||
.then(e => { | ||
assert_equals(e.data, 'READY:' + oldTimeZone); | ||
return new Promise(async resolve => { | ||
port.onmessage = resolve; | ||
// Change the time zone once the service worker is ready. | ||
await window.test_driver.set_time_zone(newTimeZone); | ||
}); | ||
}) | ||
.then(e => { | ||
assert_equals(e.data, 'SUCCESS:' + newTimeZone); | ||
}); | ||
}, 'timezonechange event work in ServiceWorker'); | ||
</script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<body> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="/resources/testdriver.js"></script> | ||
<script src="/resources/testdriver-vendor.js"></script> | ||
<script> | ||
|
||
function defaultTimeZone() { | ||
return (new Intl.DateTimeFormat()).resolvedOptions().timeZone; | ||
} | ||
promise_test(async t => { | ||
const oldTimeZone = "Pacific/Fakaofo"; | ||
const newTimeZone = "Asia/Taipei"; | ||
// First, setup the time zone in a fixed place. | ||
await window.test_driver.set_time_zone(oldTimeZone); | ||
assert_equals(defaultTimeZone(), oldTimeZone); | ||
return new Promise(r => { | ||
window.addEventListener('timezonechange', r); | ||
window.test_driver.set_time_zone(newTimeZone); | ||
}).then(e => { | ||
assert_equals(defaultTimeZone(), newTimeZone); | ||
}); | ||
}, "Test that the timezonechange event fires on window.addEventListener('timezonechange')"); | ||
</script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<body> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="/resources/testdriver.js"></script> | ||
<script src="/resources/testdriver-vendor.js"></script> | ||
<script> | ||
function defaultTimeZone() { | ||
return (new Intl.DateTimeFormat()).resolvedOptions().timeZone; | ||
} | ||
promise_test(async t => { | ||
const oldTimeZone = "Pacific/Fakaofo"; | ||
const newTimeZone = "Asia/Taipei"; | ||
// First, setup the time zone in a fixed place. | ||
await window.test_driver.set_time_zone(oldTimeZone); | ||
assert_equals(defaultTimeZone(), oldTimeZone); | ||
return new Promise(async r => { | ||
window.addEventListener('timezonechange', r); | ||
await window.test_driver.set_time_zone(newTimeZone); | ||
}).then(e => { | ||
assert_false(e.cancelable); | ||
assert_false(e.bubbles); | ||
assert_equals(defaultTimeZone(), newTimeZone); | ||
}); | ||
}, "Test properties of the fired event."); | ||
|
||
</script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<body> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="/resources/testdriver.js"></script> | ||
<script src="/resources/testdriver-vendor.js"></script> | ||
<script> | ||
function defaultTimeZone() { | ||
return (new Intl.DateTimeFormat()).resolvedOptions().timeZone; | ||
} | ||
promise_test(async t => { | ||
const oldTimeZone = "Pacific/Fakaofo"; | ||
const newTimeZone = "Asia/Taipei"; | ||
// First, setup the time_zone in a fixed place. | ||
await window.test_driver.set_time_zone(oldTimeZone); | ||
assert_equals(defaultTimeZone(), oldTimeZone); | ||
window.received = 0; // We need a global variable here. | ||
var fromWindowHandler = false; | ||
document.body.setAttribute('ontimezonechange', 'window.received++;'); | ||
|
||
return new Promise(async r => { | ||
window.ontimezonechange = r; | ||
await window.test_driver.set_time_zone(newTimeZone); | ||
}).then(evt => { | ||
received++; | ||
assert_equals(window.received, 1); | ||
assert_equals(defaultTimeZone(), newTimeZone); | ||
}); | ||
}, "Test that the timezonechange event fires on window.ontimezonechange but not body ontimezonechange attribute"); | ||
</script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<body> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="/resources/testdriver.js"></script> | ||
<script src="/resources/testdriver-vendor.js"></script> | ||
<script> | ||
|
||
test(function() { | ||
assert_true('ontimezonechange' in window); | ||
}, "Test that timezonechange event handler API is present in window"); | ||
|
||
</script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
onconnect = connectEvent => { | ||
let oldtimezone = (new Intl.DateTimeFormat()).resolvedOptions().timeZone; | ||
const port = connectEvent.ports[0]; | ||
ontimezonechange = () => { | ||
let timezone = (new Intl.DateTimeFormat()).resolvedOptions().timeZone; | ||
port.postMessage("SUCCESS:" + timezone); | ||
}; | ||
port.postMessage("READY:" + oldtimezone); // (the html will change the timezone) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
let oldtimezone = (new Intl.DateTimeFormat()).resolvedOptions().timeZone; | ||
ontimezonechange = evt => { | ||
let timezone = (new Intl.DateTimeFormat()).resolvedOptions().timeZone; | ||
postMessage("SUCCESS:" + timezone); | ||
} | ||
postMessage("READY:" + oldtimezone); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<body> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="/resources/testdriver.js"></script> | ||
<script src="/resources/testdriver-vendor.js"></script> | ||
<script> | ||
function defaultTimeZone() { | ||
return (new Intl.DateTimeFormat()).resolvedOptions().timeZone; | ||
} | ||
promise_test(async t => { | ||
const oldTimeZone = "Pacific/Fakaofo"; | ||
const newTimeZone = "Asia/Taipei"; | ||
// First, setup the time zone in a fixed place. | ||
await window.test_driver.set_time_zone(oldTimeZone); | ||
assert_equals(defaultTimeZone(), oldTimeZone); | ||
window.received = 0; // We need a global variable here. | ||
window.ontimezonechange = () => received++; | ||
document.body.setAttribute('ontimezonechange', () => { | ||
received++; | ||
assert_equals(window.received, 1); | ||
assert_equals(defaultTimeZone(), newTimeZone); | ||
}); | ||
await window.test_driver.set_time_zone(newTimeZone); | ||
}, "Test that the timezonechange event fires on body ontimezonechange attribute but not window.ontimezonechange"); | ||
</script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<body> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="/resources/testdriver.js"></script> | ||
<script src="/resources/testdriver-vendor.js"></script> | ||
<script> | ||
function defaultTimeZone() { | ||
return (new Intl.DateTimeFormat()).resolvedOptions().timeZone; | ||
} | ||
promise_test(async t => { | ||
const oldTimeZone = "Pacific/Fakaofo"; | ||
const newTimeZone = "Asia/Taipei"; | ||
// First, setup the time zone in a fixed place. | ||
await window.test_driver.set_time_zone(oldTimeZone); | ||
assert_equals(defaultTimeZone(), oldTimeZone); | ||
window.received = false; // We need a global variable here. | ||
document.body.setAttribute('ontimezonechange', 'window.received = true;'); | ||
|
||
await window.test_driver.set_time_zone(newTimeZone); | ||
assert_true(window.received); | ||
assert_equals(defaultTimeZone(), newTimeZone); | ||
}, "Test that the timezonechange event fires on body ontimezonechange attribute"); | ||
|
||
</script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
<!DOCTYPE html> | ||
<title>Test shared worker handle ontimezonechange event.</title> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="/resources/testdriver.js"></script> | ||
<script src="/resources/testdriver-vendor.js"></script> | ||
<script> | ||
promise_test(async t => { | ||
const oldTimeZone = "Pacific/Fakaofo"; | ||
const newTimeZone = "Asia/Taipei"; | ||
// First we set the time zone to a fixed time zone. | ||
await window.test_driver.set_time_zone(oldTimeZone); | ||
const worker = new SharedWorker('resources/shared-worker-timezonechange.js', 'name'); | ||
return new Promise(r => { worker.port.onmessage = r; }) | ||
.then(e => { | ||
// Once we know the worker is ready, we change the time zone. | ||
assert_equals(e.data, "READY:" + oldTimeZone); | ||
return new Promise(async r => { | ||
worker.port.onmessage = r; | ||
await window.test_driver.set_time_zone(newTimeZone); | ||
}).then(e => { | ||
assert_equals(e.data, "SUCCESS:" + newTimeZone); | ||
}) | ||
}); | ||
}, "Test a shared worker handles ontimezonechange event."); | ||
</script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<body> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="/resources/testdriver.js"></script> | ||
<script src="/resources/testdriver-vendor.js"></script> | ||
<script> | ||
function defaultTimeZone() { | ||
return (new Intl.DateTimeFormat()).resolvedOptions().timeZone; | ||
} | ||
promise_test(async t => { | ||
const oldTimeZone = "Pacific/Fakaofo"; | ||
const newTimeZone = "Asia/Taipei"; | ||
// First, setup the time zone in a fixed place. | ||
await window.test_driver.set_time_zone(oldTimeZone); | ||
assert_equals(defaultTimeZone(), oldTimeZone); | ||
return new Promise(async r => { | ||
window.ontimezonechange = r; | ||
await window.test_driver.set_time_zone(newTimeZone); | ||
}).then(e => { | ||
assert_equals(defaultTimeZone(), newTimeZone); | ||
}); | ||
}, "Test that the timezonechange event fires on window.ontimezonechange"); | ||
|
||
</script> | ||
</body> | ||
</html> |
Oops, something went wrong.