[IMP] bus, *: remove bus service legacy session dependency

*: calendar, im_livechat, mail.

Before this commit, the legacy session was a dependency for the bus
service. This was problematic since one would need to import a bunch
of legacy files to fulfill this dependency in order to use it.

This commit removes this dependency. In order to pass parameters to
the `bus_service`, the `bus_parameters` service is now used.

closes odoo/odoo#110247

Related: odoo/enterprise#35974
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
This commit is contained in:
tsm-odoo
2023-01-19 12:30:44 +01:00
parent 82e47bc547
commit c40320eb15
8 changed files with 53 additions and 12 deletions
@@ -0,0 +1,13 @@
/** @odoo-module */
import { registry } from "@web/core/registry";
export const busParametersService = {
start() {
return {
serverURL: window.origin,
};
},
};
registry.category("services").add("bus.parameters", busParametersService);
@@ -6,7 +6,6 @@ import { registry } from '@web/core/registry';
import { session } from '@web/session';
import { isIosApp } from '@web/core/browser/feature_detection';
import { WORKER_VERSION } from "@bus/workers/websocket_worker";
import legacySession from "web.session";
const { EventBus } = owl;
@@ -21,17 +20,17 @@ const { EventBus } = owl;
* @emits notification
*/
export const busService = {
dependencies: ['localization', 'multi_tab'],
dependencies: ['bus.parameters', 'localization', 'multi_tab'],
async: true,
async start(env, { multi_tab: multiTab }) {
async start(env, { multi_tab: multiTab, "bus.parameters": params }) {
if (session.dbuuid && multiTab.getSharedValue('dbuuid') !== session.dbuuid) {
multiTab.setSharedValue('dbuuid', session.dbuuid);
multiTab.removeSharedValue('last_notification_id');
}
const bus = new EventBus();
let workerURL = `${legacySession.prefix}/bus/websocket_worker_bundle?v=${WORKER_VERSION}`;
if (legacySession.prefix !== window.origin) {
let workerURL = `${params.serverURL}/bus/websocket_worker_bundle?v=${WORKER_VERSION}`;
if (params.serverURL !== window.origin) {
// Bus service is loaded from a different origin than the bundle
// URL. The Worker expects an URL from this origin, give it a base64
// URL that will then load the bundle via "importScripts" which
@@ -105,7 +104,7 @@ export const busService = {
uid = false;
}
send('initialize_connection', {
websocketURL: `${legacySession.prefix.replace("http", "ws")}/websocket`,
websocketURL: `${params.serverURL.replace("http", "ws")}/websocket`,
debug: odoo.debug,
lastNotificationId: multiTab.getSharedValue('last_notification_id', 0),
uid,
@@ -1,6 +1,7 @@
/** @odoo-module */
import { busService } from "@bus/services/bus_service";
import { busParametersService } from "@bus/bus_parameters_service";
import { presenceService } from "@bus/services/presence_service";
import { multiTabService } from "@bus/multi_tab_service";
import { getPyEnv } from '@bus/../tests/helpers/mock_python_environment';
@@ -18,6 +19,7 @@ QUnit.module("Bus Assets WatchDog", (hooks) => {
hooks.beforeEach((assert) => {
serviceRegistry.add("assetsWatchdog", assetsWatchdogService);
serviceRegistry.add("bus_service", busService);
serviceRegistry.add("bus.parameters", busParametersService);
serviceRegistry.add("presence", presenceService);
serviceRegistry.add("multi_tab", multiTabService);
patchWithCleanup(browser, {
+12 -6
View File
@@ -3,6 +3,7 @@ odoo.define('web.bus_tests', function (require) {
var { busService } = require('@bus/services/bus_service');
const { presenceService } = require('@bus/services/presence_service');
const { busParametersService } = require('@bus/bus_parameters_service');
const { multiTabService } = require('@bus/multi_tab_service');
const { WEBSOCKET_CLOSE_CODES } = require("@bus/workers/websocket_worker");
const { startServer } = require('@bus/../tests/helpers/mock_python_environment');
@@ -13,7 +14,6 @@ const { registry } = require("@web/core/registry");
const { session } = require('@web/session');
const { makeDeferred, nextTick, patchWithCleanup } = require("@web/../tests/helpers/utils");
const { makeTestEnv } = require('@web/../tests/helpers/mock_env');
const legacySession = require('web.session');
QUnit.module('Bus', {
beforeEach: function () {
@@ -26,6 +26,7 @@ QUnit.module('Bus', {
return originalMultiTabService;
},
};
registry.category('services').add('bus.parameters', busParametersService);
registry.category('services').add('bus_service', busService);
registry.category('services').add('presence', presenceService);
registry.category('services').add('multi_tab', customMultiTabService);
@@ -463,11 +464,16 @@ QUnit.module('Bus', {
]);
});
QUnit.test("WebSocket connects with URL corresponding to session prefix", async function (assert) {
QUnit.test("WebSocket connects with URL corresponding to given serverURL", async function (assert) {
patchWebsocketWorkerWithCleanup();
const origin = "http://random-website.com";
patchWithCleanup(legacySession, {
prefix: origin,
const serverURL = "http://random-website.com";
patchWithCleanup(busParametersService, {
start() {
return {
...this._super(...arguments),
serverURL,
};
},
});
const websocketCreatedDeferred = makeDeferred();
patchWithCleanup(window, {
@@ -480,7 +486,7 @@ QUnit.module('Bus', {
const env = await makeTestEnv();
env.services["bus_service"].start();
await websocketCreatedDeferred;
assert.verifySteps([`${origin.replace("http", "ws")}/websocket`]);
assert.verifySteps([`${serverURL.replace("http", "ws")}/websocket`]);
});
});
});
@@ -2,6 +2,7 @@
import { busService } from "@bus/services/bus_service";
import { presenceService } from "@bus/services/presence_service";
import { busParametersService } from "@bus/bus_parameters_service";
import { multiTabService } from "@bus/multi_tab_service";
import { getPyEnv } from '@bus/../tests/helpers/mock_python_environment';
@@ -21,6 +22,7 @@ QUnit.module("Calendar Notification", (hooks) => {
serviceRegistry.add("calendarNotification", calendarNotificationService);
serviceRegistry.add("bus_service", busService);
serviceRegistry.add("bus.parameters", busParametersService);
serviceRegistry.add("presence", presenceService);
serviceRegistry.add("multi_tab", multiTabService);
patchWithCleanup(browser, {
+1
View File
@@ -184,6 +184,7 @@ Help your customers with this chat, and analyse their feedback.
'web/static/src/legacy/js/services/ajax_service.js',
'web/static/src/legacy/js/services/local_storage_service.js',
# Bus, Mail, Livechat
'bus/static/src/bus_parameters_service.js',
'bus/static/src/im_status_service.js',
'bus/static/src/multi_tab_service.js',
'bus/static/src/services/bus_service.js',
@@ -0,0 +1,16 @@
/** @odoo-module */
import { busParametersService } from "@bus/bus_parameters_service";
import { serverUrl } from "@im_livechat/livechat_data";
import { patch } from "@web/core/utils/patch";
patch(busParametersService, "im_livechat", {
start() {
return {
...this._super(...arguments),
serverURL: serverUrl.replace(/\/+$/, ""),
};
},
});
@@ -1,6 +1,7 @@
/** @odoo-module **/
import { busService } from "@bus/services/bus_service";
import { busParametersService } from "@bus/bus_parameters_service";
import { imStatusService } from "@bus/im_status_service";
import { multiTabService } from "@bus/multi_tab_service";
import { makeMultiTabToLegacyEnv } from "@bus/services/legacy/make_multi_tab_to_legacy_env";
@@ -96,6 +97,7 @@ function setupMessagingServiceRegistries({
services = {
bus_service: busService,
"bus.parameters": busParametersService,
im_status: imStatusService,
messaging: messagingService,
messagingValues,