summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaznacheev@chromium.org <kaznacheev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-12 13:54:35 +0000
committerkaznacheev@chromium.org <kaznacheev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-12 13:54:35 +0000
commit02ff8ad95828f62476fce8de96324f382491b079 (patch)
treeac4a84d0f9ab7bc55a4e6d600fbffec2b87c7d5a
parentb275654c52912f71c07583f18ac42489917f010e (diff)
downloadchromium_src-02ff8ad95828f62476fce8de96324f382491b079.zip
chromium_src-02ff8ad95828f62476fce8de96324f382491b079.tar.gz
chromium_src-02ff8ad95828f62476fce8de96324f382491b079.tar.bz2
Add chrome.debugger API tests for shared worker targets.
BUG=226014 Review URL: https://chromiumcodereview.appspot.com/13773003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@193915 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/api/debugger/debugger_api.cc10
-rw-r--r--chrome/test/data/extensions/api_test/debugger/background.js17
-rw-r--r--chrome/test/data/extensions/api_test/debugger/worker.js9
-rw-r--r--chrome/test/data/extensions/api_test/debugger_extension/background.js16
-rw-r--r--chrome/test/data/extensions/api_test/debugger_extension/worker.js9
5 files changed, 60 insertions, 1 deletions
diff --git a/chrome/browser/extensions/api/debugger/debugger_api.cc b/chrome/browser/extensions/api/debugger/debugger_api.cc
index b41d28a..b9d3b59 100644
--- a/chrome/browser/extensions/api/debugger/debugger_api.cc
+++ b/chrome/browser/extensions/api/debugger/debugger_api.cc
@@ -301,6 +301,12 @@ ExtensionDevToolsClientHost::ExtensionDevToolsClientHost(
registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
content::Source<Profile>(profile_));
+ // RVH-based agents disconnect from their clients when the app is terminating
+ // but shared worker-based agents do not.
+ // Disconnect explicitly to make sure that |this| observer is not leaked.
+ registrar_.Add(this, chrome::NOTIFICATION_APP_TERMINATING,
+ content::NotificationService::AllSources());
+
// Attach to debugger and tell it we are ready.
DevToolsManager::GetInstance()->
RegisterDevToolsClientHostFor(agent_host_, this);
@@ -386,7 +392,9 @@ void ExtensionDevToolsClientHost::Observe(
content::Details<extensions::UnloadedExtensionInfo>(details)->
extension->id();
if (id == extension_id_)
- Close();
+ Close();
+ } else if (type == chrome::NOTIFICATION_APP_TERMINATING) {
+ Close();
} else {
DCHECK_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, type);
if (content::Details<InfoBarRemovedDetails>(details)->first ==
diff --git a/chrome/test/data/extensions/api_test/debugger/background.js b/chrome/test/data/extensions/api_test/debugger/background.js
index 17f9090..ce7d5ba8 100644
--- a/chrome/test/data/extensions/api_test/debugger/background.js
+++ b/chrome/test/data/extensions/api_test/debugger/background.js
@@ -147,5 +147,22 @@ chrome.test.runTests([
}
chrome.tabs.onUpdated.addListener(onUpdated);
chrome.tabs.create({url: "inspected.html"});
+ },
+
+ function discoverWorker() {
+ var workerPort = new SharedWorker("worker.js").port;
+ workerPort.onmessage = function() {
+ chrome.debugger.getTargets(function(targets) {
+ var page = targets.filter(
+ function(t) { return t.type == 'worker' })[0];
+ if (page) {
+ chrome.debugger.attach({targetId: page.id}, protocolVersion,
+ fail(SILENT_FLAG_REQUIRED));
+ } else {
+ chrome.test.fail("Cannot discover a newly created worker");
+ }
+ });
+ };
+ workerPort.start();
}
]);
diff --git a/chrome/test/data/extensions/api_test/debugger/worker.js b/chrome/test/data/extensions/api_test/debugger/worker.js
new file mode 100644
index 0000000..4d310c5
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/debugger/worker.js
@@ -0,0 +1,9 @@
+// Copyright (c) 2013 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.
+
+self.addEventListener('connect', function(e) {
+ var port = e.ports[0];
+ port.start();
+ port.postMessage({});
+}); \ No newline at end of file
diff --git a/chrome/test/data/extensions/api_test/debugger_extension/background.js b/chrome/test/data/extensions/api_test/debugger_extension/background.js
index 20efd32..2299000 100644
--- a/chrome/test/data/extensions/api_test/debugger_extension/background.js
+++ b/chrome/test/data/extensions/api_test/debugger_extension/background.js
@@ -51,5 +51,21 @@ chrome.test.runTests([
chrome.test.fail("Cannot discover own background page");
}
});
+ },
+
+ function discoverWorker() {
+ var workerPort = new SharedWorker("worker.js").port;
+ workerPort.onmessage = function() {
+ chrome.debugger.getTargets(function(targets) {
+ var page = targets.filter(
+ function(t) { return t.type == 'worker' })[0];
+ if (page) {
+ chrome.debugger.attach({targetId: page.id}, protocolVersion, pass());
+ } else {
+ chrome.test.fail("Cannot discover a newly created worker");
+ }
+ });
+ };
+ workerPort.start();
}
]);
diff --git a/chrome/test/data/extensions/api_test/debugger_extension/worker.js b/chrome/test/data/extensions/api_test/debugger_extension/worker.js
new file mode 100644
index 0000000..4d310c5
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/debugger_extension/worker.js
@@ -0,0 +1,9 @@
+// Copyright (c) 2013 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.
+
+self.addEventListener('connect', function(e) {
+ var port = e.ports[0];
+ port.start();
+ port.postMessage({});
+}); \ No newline at end of file