forked from johnjbarton/crx2app
/
background.html
111 lines (92 loc) · 3.56 KB
/
background.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<!DOCTYPE html>
<!--
// crx2app
// Copyright 2011 Google Inc.
// johnjbarton@google.com
-->
<html>
<head>
<script src="PostSource.js"></script>
<script src="ensureOrigin.js"></script>
<script src="saveRestoreOptions.js"></script>
<script src="WindowsAdapter.js"></script>
<script src="TabsAdapter.js"></script>
<script src="DebuggerAdapter.js"></script>
<script src="crxEnd.js"></script>
<script src="contextMenu.js"></script>
<!-- for the constants -->
<script src="../appEnd/appEnd.js"></script>
<script>
function define(deps, defn) {
window.remote = defn();
}
</script>
<script src="../rpc/remote.js"></script>
<script>
/*globals window restoreOptions buildContextMenuItem */
var WindowsAdapter = makeWindowsAdapter(chrome, PostSource);
var TabsAdapter = makeTabsAdapter(chrome, PostSource);
var DebuggerAdapter = makeDebuggerAdapter(chrome, PostSource, window.remote);
function adapterFactory(origin, debuggerTab) {
var adapters = {};
var windowsAdapter = new WindowsAdapter(origin, debuggerTab);
adapters[WindowsAdapter.path] = windowsAdapter;
adapters[TabsAdapter.path] = new TabsAdapter(windowsAdapter);
adapters[DebuggerAdapter.path] = new DebuggerAdapter(windowsAdapter);
return adapters;
}
function obeyOptions() {
window.debugConnection = false;
window.debugMessages = false;
window.debugWarnings = false;
window.debugAdapters = false;
var options = restoreOptions();
if (!options) { // maybe our first time
return;
}
window.debugConnection = options.debugConnection;
window.debugMessages = options.debugMessages;
window.debugWarnings = options.debugWarnings;
window.debugAdapters = options.debugAdapters;
options.allowedSites = options.allowedSites || [];
options.allowedSites.forEach(function(allowedSite) {
var name = 'Debug With ' + allowedSite.name;
if (name && name !== '(none)') {
// open blank and update to avoid racing debugger attaching to the tab
//********** workaround for http://code.google.com/p/chromium/issues/detail?id=108519
var extensionDomain = "chrome-extension://bbjpappmojnmallpnfgfkjmjnhhplgog";
var fakeBlankURL = extensionDomain+"/workaroundBug108519.html";
//**********
buildContextMenuItem(name, fakeBlankURL, function onDebuggerWindowCreated(debuggeeTabId, win) {
var debuggerTab = win.tabs[0];
// We just created a window for the debugger.
// We gave it a tabId via the URL parameters, it will now try to attach to that tabId
// We need to allow it by finding the right instance of windowsAdapter and calling addTab.
crxEnd.checkDebuggerOrigin(allowedSite.site, function onValidOrigin(validOrigin) {
var windowsAdapter = crxEnd.getWindowsAdaptersByOrigin(validOrigin, debuggerTab);
if (!windowsAdapter) { // then this origin has not been seen
windowsAdapter = crxEnd.createWindowsAdapter(validOrigin, debuggerTab);
}
windowsAdapter.addTab(debuggeeTabId);
var url = allowedSite.site + '?tabId=' + debuggeeTabId + '&';
// now release the debugger
chrome.tabs.update(debuggerTab.id, {url: url}, function(tab) {
console.log("Opened debugger based on context menu click "+url);
});
}, function onInvalid(msg){
// TODO we are in a context menu handler, should we alert?
console.error(msg);
return;
});
});
}
});
}
obeyOptions();
var crxEnd = makeCxrEnd(getChromeExtensionPipe, chrome);
crxEnd.attach(adapterFactory);
</script>
</head>
<body>
</body>
</html>