| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| (async function() { |
| TestRunner.addResult(`Tests that User-Agent override works for requests from Service Workers.\n`); |
| await TestRunner.loadModule('application_test_runner'); |
| // Note: every test that uses a storage API must manually clean-up state from previous tests. |
| await ApplicationTestRunner.resetState(); |
| |
| await TestRunner.loadModule('console_test_runner'); |
| await TestRunner.showPanel('resources'); |
| |
| function waitForTarget() { |
| return new Promise(function(resolve) { |
| var sniffer = { |
| targetAdded: function(target) { |
| if (TestRunner.isServiceWorker(target)) { |
| resolve(); |
| SDK.targetManager.unobserveTargets(sniffer); |
| } |
| }, |
| |
| targetRemoved: function(e) {} |
| }; |
| SDK.targetManager.observeTargets(sniffer); |
| }); |
| } |
| |
| function waitForConsoleMessage(regex) { |
| return new Promise(function(resolve) { |
| ConsoleModel.consoleModel.addEventListener(ConsoleModel.ConsoleModel.Events.MessageAdded, sniff); |
| |
| function sniff(e) { |
| if (e.data && regex.test(e.data.messageText)) { |
| resolve(e.data); |
| ConsoleModel.consoleModel.removeEventListener(ConsoleModel.ConsoleModel.Events.MessageAdded, sniff); |
| } |
| } |
| }); |
| } |
| |
| var scriptURL = 'http://127.0.0.1:8000/devtools/service-workers/resources/user-agent-override-worker.js'; |
| var scope = 'http://127.0.0.1:8000/devtools/service-workers/resources/user-agent-override/'; |
| var userAgentString = 'Mozilla/5.0 (Overridden User Agent)'; |
| var originalUserAgent = navigator.userAgent; |
| |
| TestRunner.addResult('Enable emulation and set User-Agent override'); |
| SDK.multitargetNetworkManager.setUserAgentOverride(userAgentString); |
| |
| ApplicationTestRunner.registerServiceWorker(scriptURL, scope) |
| .then(waitForTarget) |
| .then(ApplicationTestRunner.postToServiceWorker.bind(ApplicationTestRunner, scope, 'message')) |
| .then(waitForConsoleMessage.bind(null, /HTTP_USER_AGENT/)) |
| .then(function(msg) { |
| TestRunner.addResult('Overriden user agent: ' + msg.messageText); |
| TestRunner.addResult('Disable emulation'); |
| SDK.multitargetNetworkManager.setUserAgentOverride(''); |
| return ApplicationTestRunner.unregisterServiceWorker(scope); |
| }) |
| .then(function() { |
| return ApplicationTestRunner.registerServiceWorker(scriptURL + '?2', scope); |
| }) |
| .then(waitForTarget) |
| .then(ApplicationTestRunner.postToServiceWorker.bind(ApplicationTestRunner, scope, 'message')) |
| .then(waitForConsoleMessage.bind(null, /HTTP_USER_AGENT/)) |
| .then(function(msg) { |
| TestRunner.addResult('User agent without override is correct: ' + (msg.messageText != userAgentString)); |
| return ApplicationTestRunner.unregisterServiceWorker(scope); |
| }) |
| .then(function() { |
| TestRunner.addResult('Test complete'); |
| TestRunner.completeTest(); |
| }) |
| .catch(function(err) { |
| console.log(err); |
| TestRunner.completeTest(); |
| }); |
| })(); |