[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:
@@ -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, {
|
||||
|
||||
@@ -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, {
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user