Pin Chrome's shortcut to the Win10 Start menu on install and OS upgrade.
[chromium-blink-merge.git] / chrome / test / data / extensions / api_test / debugger / background.js
blobb902f8678303dd0a6d95b274e6288261993c197c
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 var pass = chrome.test.callbackPass;
6 var fail = chrome.test.callbackFail;
8 var tabId;
9 var debuggee;
10 var protocolVersion = "1.1";
11 var protocolPreviousVersion = "1.0";
13 var SILENT_FLAG_REQUIRED = "Cannot attach to this target unless " +
14     "'silent-debugger-extension-api' flag is enabled.";
16 chrome.test.runTests([
18   function attachMalformedVersion() {
19     chrome.tabs.getSelected(null, function(tab) {
20       chrome.debugger.attach({tabId: tab.id}, "malformed-version", fail(
21           "Requested protocol version is not supported: malformed-version."));
22     });
23   },
25   function attachUnsupportedMinorVersion() {
26     chrome.tabs.getSelected(null, function(tab) {
27       chrome.debugger.attach({tabId: tab.id}, "1.5",
28           fail("Requested protocol version is not supported: 1.5."));
29     });
30   },
32   function attachUnsupportedVersion() {
33     chrome.tabs.getSelected(null, function(tab) {
34       chrome.debugger.attach({tabId: tab.id}, "100.0",
35           fail("Requested protocol version is not supported: 100.0."));
36     });
37   },
39   function attachPreviousVersion() {
40     chrome.tabs.getSelected(null, function(tab) {
41       debuggee = {tabId: tab.id};
42       chrome.debugger.attach(debuggee, protocolPreviousVersion, function() {
43         chrome.debugger.detach(debuggee, pass());
44       });
45     });
46   },
48   function attachLatestVersion() {
49     chrome.tabs.getSelected(null, function(tab) {
50       tabId = tab.id;
51       debuggee = {tabId: tab.id};
52       chrome.debugger.attach(debuggee, protocolVersion, pass());
53     });
54   },
56   function attachAgain() {
57     chrome.debugger.attach(debuggee, protocolVersion,
58         fail("Another debugger is already attached to the tab with id: " +
59                  tabId + "."));
60   },
62   function sendCommand() {
63     function onResponse() {
64       if (chrome.runtime.lastError &&
65           chrome.runtime.lastError.message.indexOf("invalidMethod") != -1)
66         chrome.test.succeed();
67       else
68         chrome.test.fail();
69     }
70     chrome.debugger.sendCommand(debuggee,
71                                "DOM.invalidMethod",
72                                null,
73                                onResponse);
74   },
76   function detach() {
77     chrome.debugger.detach(debuggee, pass());
78   },
80   function sendCommandAfterDetach() {
81     chrome.debugger.sendCommand(debuggee, "Foo", null,
82         fail("Debugger is not attached to the tab with id: " + tabId + "."));
83   },
85   function detachAgain() {
86     chrome.debugger.detach(debuggee,
87         fail("Debugger is not attached to the tab with id: " + tabId + "."));
88   },
90   function closeTab() {
91     chrome.tabs.create({url:"inspected.html"}, function(tab) {
92       function onDetach(debuggee, reason) {
93         chrome.test.assertEq(tab.id, debuggee.tabId);
94         chrome.test.assertEq("target_closed", reason);
95         chrome.debugger.onDetach.removeListener(onDetach);
96         chrome.test.succeed();
97       }
99       var debuggee2 = {tabId: tab.id};
100       chrome.debugger.attach(debuggee2, protocolVersion, function() {
101         chrome.debugger.onDetach.addListener(onDetach);
102         chrome.tabs.remove(tab.id);
103       });
104     });
105   },
107   function attachToWebUI() {
108     chrome.tabs.create({url:"chrome://version"}, function(tab) {
109       var debuggee = {tabId: tab.id};
110       chrome.debugger.attach(debuggee, protocolVersion,
111           fail("Cannot access a chrome:// URL"));
112       chrome.tabs.remove(tab.id);
113     });
114   },
116   function attachToMissing() {
117     var missingDebuggee = {tabId: -1};
118     chrome.debugger.attach(missingDebuggee, protocolVersion,
119         fail("No tab with given id " + missingDebuggee.tabId + "."));
120   },
122   function attachToOwnBackgroundPageWithNoSilentFlag() {
123     var ownExtensionId = chrome.extension.getURL('').split('/')[2];
124     var debuggeeExtension = {extensionId: ownExtensionId};
125     chrome.debugger.attach(debuggeeExtension, protocolVersion,
126         fail(SILENT_FLAG_REQUIRED));
127   },
129   function discoverOwnBackgroundPageWithNoSilentFlag() {
130     chrome.debugger.getTargets(function(targets) {
131       var target = targets.filter(
132           function(target) { return target.type == 'background_page'})[0];
133       if (target) {
134         chrome.debugger.attach({targetId: target.id}, protocolVersion,
135             fail(SILENT_FLAG_REQUIRED));
136       } else {
137         chrome.test.succeed();
138       }
139     });
140   },
142   function createAndDiscoverTab() {
143     function onUpdated(tabId, changeInfo) {
144       if (changeInfo.status == 'loading')
145         return;
146       chrome.tabs.onUpdated.removeListener(onUpdated);
147       chrome.debugger.getTargets(function(targets) {
148         var page = targets.filter(
149             function(t) {
150               return t.type == 'page' &&
151                      t.tabId == tabId &&
152                      t.title == 'Test page';
153             })[0];
154         if (page) {
155           chrome.debugger.attach(
156               {targetId: page.id}, protocolVersion, pass());
157         } else {
158           chrome.test.fail("Cannot discover a newly created tab");
159         }
160       });
161     }
162     chrome.tabs.onUpdated.addListener(onUpdated);
163     chrome.tabs.create({url: "inspected.html"});
164   },
166   function discoverWorker() {
167     var workerPort = new SharedWorker("worker.js").port;
168     workerPort.onmessage = function() {
169       chrome.debugger.getTargets(function(targets) {
170         var page = targets.filter(
171             function(t) { return t.type == 'worker' })[0];
172         if (page) {
173           chrome.debugger.attach({targetId: page.id}, protocolVersion,
174               fail(SILENT_FLAG_REQUIRED));
175         } else {
176           chrome.test.fail("Cannot discover a newly created worker");
177         }
178       });
179     };
180     workerPort.start();
181   },
183   function sendCommandDuringNavigation() {
184     chrome.tabs.create({url:"inspected.html"}, function(tab) {
185       var debuggee = {tabId: tab.id};
187       function checkError() {
188         if (chrome.runtime.lastError) {
189           chrome.test.fail(chrome.runtime.lastError.message);
190         } else {
191           chrome.tabs.remove(tab.id);
192           chrome.test.succeed();
193         }
194       }
196       function onNavigateDone() {
197         chrome.debugger.sendCommand(debuggee, "Page.disable", null, checkError);
198       }
200       function onAttach() {
201         chrome.debugger.sendCommand(debuggee, "Page.enable");
202         chrome.debugger.sendCommand(
203             debuggee, "Page.navigate", {url:"about:blank"}, onNavigateDone);
204       }
206       chrome.debugger.attach(debuggee, protocolVersion, onAttach);
207     });
208   }