Index: chrome/test/data/devtools/target_list/background.js |
diff --git a/chrome/test/data/devtools/target_list/background.js b/chrome/test/data/devtools/target_list/background.js |
index 60a6ca072c988215a837529dee7f90968daecd00..6b5457780015f72258d4811d19f2f31a42139c85 100644 |
--- a/chrome/test/data/devtools/target_list/background.js |
+++ b/chrome/test/data/devtools/target_list/background.js |
@@ -2,9 +2,11 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-function requestUrl(url, callback) { |
+var REMOTE_DEBUGGER_HOST = 'localhost:9222'; |
+ |
+function requestUrl(path, callback) { |
var req = new XMLHttpRequest(); |
- req.open('GET', url, true); |
+ req.open('GET', 'http://' + REMOTE_DEBUGGER_HOST + path, true); |
req.onload = function() { |
if (req.status == 200) |
callback(req.responseText); |
@@ -17,7 +19,6 @@ function requestUrl(url, callback) { |
req.send(null); |
} |
-var REMOTE_DEBUGGER_HOST = 'localhost:9222'; |
function checkTarget(targets, url, type, opt_title, opt_faviconUrl) { |
var target = |
@@ -40,29 +41,158 @@ function checkTarget(targets, url, type, opt_title, opt_faviconUrl) { |
chrome.test.assertEq(opt_title || target.url, target.title); |
chrome.test.assertEq(type, target.type); |
chrome.test.assertEq('ws://' + wsAddress, target.webSocketDebuggerUrl); |
+ |
+ return target; |
+} |
+ |
+function waitForTab(filter, callback) { |
+ var fired = false; |
+ function onUpdated(updatedTabId, changeInfo, updatedTab) { |
+ if (!filter(updatedTab) && !fired) |
+ return; |
+ |
+ chrome.tabs.onUpdated.removeListener(onUpdated); |
+ if (!fired) { |
+ fired = true; |
+ callback(updatedTab); |
+ } |
+ } |
+ |
+ chrome.tabs.onUpdated.addListener(onUpdated); |
+ |
+ chrome.tabs.query({}, function(tabs) { |
+ if (!fired) { |
+ for (var i = 0; i < tabs.length; ++i) |
+ if (filter(tabs[i])) { |
+ fired = true; |
+ callback(tabs[i]); |
+ } |
+ } |
+ }); |
} |
+function listenOnce(event, func) { |
+ var listener = function() { |
+ event.removeListener(listener); |
+ func.apply(null, arguments) |
+ }; |
+ event.addListener(listener); |
+} |
+ |
+function runNewPageTest(devtoolsUrl, expectedUrl) { |
+ var json; |
+ var newTab; |
+ var pendingCount = 2; |
+ |
+ function checkResult() { |
+ if (--pendingCount) |
+ return; |
+ chrome.test.assertEq(newTab.url, expectedUrl); |
+ chrome.test.assertEq(json.url, expectedUrl); |
+ chrome.test.assertTrue(newTab.active); |
+ chrome.test.succeed(); |
+ } |
+ |
+ function onCreated(createdTab) { |
+ waitForTab( |
+ function(tab) { |
+ return tab.id == createdTab.id && |
+ tab.active && |
+ tab.status == "complete"; |
+ }, |
+ function(tab) { |
+ newTab = tab; |
+ checkResult(); |
+ }); |
+ } |
+ |
+ listenOnce(chrome.tabs.onCreated, onCreated); |
+ |
+ requestUrl(devtoolsUrl, |
+ function(text) { |
+ json = JSON.parse(text); |
+ checkResult(); |
+ }); |
+} |
+ |
+var extensionTargetId; |
+var extensionTabId; |
+ |
chrome.test.runTests([ |
function discoverTargets() { |
var testPageUrl = chrome.extension.getURL('test_page.html'); |
- function onUpdated() { |
- chrome.tabs.onUpdated.removeListener(onUpdated); |
- requestUrl('http://' + REMOTE_DEBUGGER_HOST + '/json', function(text) { |
+ function onUpdated(updatedTabId) { |
+ requestUrl('/json', function(text) { |
var targets = JSON.parse(text); |
+ waitForTab( |
+ function(tab) { |
+ return tab.id == updatedTabId && tab.status == "complete" |
+ }, |
+ function() { |
+ checkTarget(targets, 'about:blank', 'page'); |
+ checkTarget(targets, |
+ chrome.extension.getURL('_generated_background_page.html'), |
+ 'background_page', |
+ 'Remote Debugger Test'); |
+ extensionTargetId = checkTarget(targets, |
+ testPageUrl, 'page', 'Test page', |
+ chrome.extension.getURL('favicon.png')).id; |
+ chrome.test.succeed(); |
+ }); |
+ }); |
+ } |
+ listenOnce(chrome.tabs.onUpdated, onUpdated); |
+ chrome.tabs.create({url: testPageUrl}); |
+ }, |
- checkTarget(targets, 'about:blank', 'page'); |
- checkTarget(targets, testPageUrl, 'page', 'Test page', |
- chrome.extension.getURL('favicon.png')); |
- checkTarget(targets, |
- chrome.extension.getURL('_generated_background_page.html'), |
- 'background_page', |
- 'Remote Debugger Test'); |
+ function versionInfo() { |
+ requestUrl('/json/version', |
+ function(text) { |
+ var versionInfo = JSON.parse(text); |
+ chrome.test.assertTrue(/^Chrome\//.test(versionInfo["Browser"])); |
+ chrome.test.assertTrue("Protocol-Version" in versionInfo); |
+ chrome.test.assertTrue("User-Agent" in versionInfo); |
+ chrome.test.assertTrue("WebKit-Version" in versionInfo); |
+ chrome.test.succeed(); |
+ }); |
+ }, |
- chrome.test.succeed(); |
- }); |
+ function activatePage() { |
+ requestUrl('/json/activate/' + extensionTargetId, |
+ function(text) { |
+ chrome.test.assertEq(text, "Target activated"); |
+ waitForTab( |
+ function(tab) { |
+ return tab.active && |
+ tab.status == "complete" && |
+ tab.title == 'Test page'; |
+ }, |
+ function (tab) { |
+ extensionTabId = tab.id; |
+ chrome.test.succeed(); |
+ }); |
+ }); |
+ }, |
+ |
+ function closePage() { |
+ function onRemoved(tabId) { |
+ chrome.test.assertEq(tabId, extensionTabId); |
+ chrome.test.succeed(); |
} |
- chrome.tabs.onUpdated.addListener(onUpdated); |
- chrome.tabs.create({url: testPageUrl}); |
+ |
+ listenOnce(chrome.tabs.onRemoved, onRemoved); |
+ |
+ requestUrl('/json/close/' + extensionTargetId, function(text) { |
+ chrome.test.assertEq(text, "Target is closing"); |
+ }); |
+ }, |
+ |
+ function newSpecificPage() { |
+ runNewPageTest('/json/new?chrome://version/', "chrome://version/"); |
+ }, |
+ |
+ function newDefaultPage() { |
+ runNewPageTest('/json/new', "about:blank"); |
} |
]); |