summaryrefslogtreecommitdiffstats
path: root/devtools/client/webconsole/service-container.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--devtools/client/webconsole/service-container.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/devtools/client/webconsole/service-container.js b/devtools/client/webconsole/service-container.js
new file mode 100644
index 0000000000..a41e49477a
--- /dev/null
+++ b/devtools/client/webconsole/service-container.js
@@ -0,0 +1,72 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const {
+ createContextMenu,
+} = require("resource://devtools/client/webconsole/utils/context-menu.js");
+
+const {
+ createEditContextMenu,
+} = require("resource://devtools/client/framework/toolbox-context-menu.js");
+const {
+ getLongStringFullText,
+} = require("resource://devtools/client/shared/string-utils.js");
+
+function setupServiceContainer({
+ webConsoleUI,
+ hud,
+ toolbox,
+ webConsoleWrapper,
+}) {
+ const serviceContainer = {
+ openContextMenu: (event, message) =>
+ createContextMenu(event, message, webConsoleWrapper),
+
+ openEditContextMenu: event => {
+ const { screenX, screenY } = event;
+ const menu = createEditContextMenu(window, "webconsole-menu");
+ // Emit the "menu-open" event for testing.
+ menu.once("open", () => webConsoleWrapper.emitForTests("menu-open"));
+ menu.popup(screenX, screenY, hud.chromeWindow.document);
+ },
+
+ // NOTE these methods are proxied currently because the
+ // service container is passed down the tree. These methods should eventually
+ // be moved to redux actions.
+ recordTelemetryEvent: (event, extra = {}) => hud.recordEvent(event, extra),
+ openLink: (url, e) => hud.openLink(url, e),
+ openNodeInInspector: grip => hud.openNodeInInspector(grip),
+ getInputSelection: () => hud.getInputSelection(),
+ onViewSource: location => hud.viewSource(location.url, location.line),
+ resendNetworkRequest: requestId => hud.resendNetworkRequest(requestId),
+ focusInput: () => hud.focusInput(),
+ setInputValue: value => hud.setInputValue(value),
+ getLongString: grip => getLongStringFullText(hud.commands.client, grip),
+ getJsTermTooltipAnchor: () => webConsoleUI.getJsTermTooltipAnchor(),
+ emitForTests: (event, value) => webConsoleUI.emitForTests(event, value),
+ attachRefToWebConsoleUI: (id, node) => webConsoleUI.attachRef(id, node),
+ requestData: (id, type) =>
+ webConsoleUI.networkDataProvider.requestData(id, type),
+ createElement: nodename => webConsoleWrapper.createElement(nodename),
+ };
+
+ if (toolbox) {
+ const { highlight, unhighlight } = toolbox.getHighlighter();
+
+ Object.assign(serviceContainer, {
+ sourceMapURLService: toolbox.sourceMapURLService,
+ highlightDomElement: highlight,
+ unHighlightDomElement: unhighlight,
+ onViewSourceInDebugger: location => hud.onViewSourceInDebugger(location),
+ onViewSourceInStyleEditor: location =>
+ hud.onViewSourceInStyleEditor(location),
+ });
+ }
+
+ return serviceContainer;
+}
+
+module.exports.setupServiceContainer = setupServiceContainer;