From c40320eb1503e4f630b8888aa6f8a33e96c256c2 Mon Sep 17 00:00:00 2001 From: tsm-odoo Date: Wed, 18 Jan 2023 10:06:51 +0000 Subject: [PATCH] [IMP] bus, *: remove bus service legacy session dependency MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit *: 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) --- .../bus/static/src/bus_parameters_service.js | 13 +++++++++++++ addons/bus/static/src/services/bus_service.js | 11 +++++------ .../bus/static/tests/assets_watchdog_tests.js | 2 ++ addons/bus/static/tests/bus_tests.js | 18 ++++++++++++------ .../tests/calendar_notification_tests.js | 2 ++ addons/im_livechat/__manifest__.py | 1 + .../src/public/bus_parameters_service_patch.js | 16 ++++++++++++++++ .../static/tests/helpers/webclient_setup.js | 2 ++ 8 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 addons/bus/static/src/bus_parameters_service.js create mode 100644 addons/im_livechat/static/src/public/bus_parameters_service_patch.js diff --git a/addons/bus/static/src/bus_parameters_service.js b/addons/bus/static/src/bus_parameters_service.js new file mode 100644 index 00000000000..eb803d4c89d --- /dev/null +++ b/addons/bus/static/src/bus_parameters_service.js @@ -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); diff --git a/addons/bus/static/src/services/bus_service.js b/addons/bus/static/src/services/bus_service.js index 330949f6a4e..1c89ced446f 100644 --- a/addons/bus/static/src/services/bus_service.js +++ b/addons/bus/static/src/services/bus_service.js @@ -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, diff --git a/addons/bus/static/tests/assets_watchdog_tests.js b/addons/bus/static/tests/assets_watchdog_tests.js index 302dcd019c0..68973eb00f1 100644 --- a/addons/bus/static/tests/assets_watchdog_tests.js +++ b/addons/bus/static/tests/assets_watchdog_tests.js @@ -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, { diff --git a/addons/bus/static/tests/bus_tests.js b/addons/bus/static/tests/bus_tests.js index 7fd90282c83..8b9ac0aa1e8 100644 --- a/addons/bus/static/tests/bus_tests.js +++ b/addons/bus/static/tests/bus_tests.js @@ -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`]); }); }); }); diff --git a/addons/calendar/static/tests/calendar_notification_tests.js b/addons/calendar/static/tests/calendar_notification_tests.js index 4abfaeb898b..02fdf6e891c 100644 --- a/addons/calendar/static/tests/calendar_notification_tests.js +++ b/addons/calendar/static/tests/calendar_notification_tests.js @@ -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, { diff --git a/addons/im_livechat/__manifest__.py b/addons/im_livechat/__manifest__.py index a893a02881e..39bd8180cd1 100644 --- a/addons/im_livechat/__manifest__.py +++ b/addons/im_livechat/__manifest__.py @@ -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', diff --git a/addons/im_livechat/static/src/public/bus_parameters_service_patch.js b/addons/im_livechat/static/src/public/bus_parameters_service_patch.js new file mode 100644 index 00000000000..255aa79b6aa --- /dev/null +++ b/addons/im_livechat/static/src/public/bus_parameters_service_patch.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(/\/+$/, ""), + }; + }, +}); diff --git a/addons/mail/static/tests/helpers/webclient_setup.js b/addons/mail/static/tests/helpers/webclient_setup.js index b88d36b9ba6..55dd4259abf 100644 --- a/addons/mail/static/tests/helpers/webclient_setup.js +++ b/addons/mail/static/tests/helpers/webclient_setup.js @@ -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,