[FIX] web: avoid expensive 404 during js tests

A 404 will take 3 to 5 seconds to be resolved and execute +- 1900 query, to return
a rendered page which is quite expensive, especially when multiple missing images
are rendered in a view.

Catching static route and marking them as not frontend will help to avoid to handle miss
on static resources. In this case server returns a standard 404.

This commit also fix a iframe src in order to avoid a 404 on
/web/(test )/report/html/some_report (thx to aab-odoo)

X-original-commit: 818d0cb59fbae78d0edf06318082981f318e4db7
This commit is contained in:
Xavier-Do
2019-10-17 17:10:06 +00:00
committed by fw-bot
parent ed1236275f
commit d65fcfecb6
3 changed files with 12 additions and 6 deletions
+6 -2
View File
@@ -427,8 +427,12 @@ class IrHttp(models.AbstractModel):
request.is_frontend = func.routing.get('website', False)
except werkzeug.exceptions.NotFound as e:
# either we have a language prefixed route, either a real 404
# in all cases, website processes them
request.is_frontend = True
# in all cases, website processes them exept if second element is static
# Checking static will avoid to generate an expensive 404 web page since
# most of the time the browser is loading and inexisting assets or image. A standard 404 is enough.
# Earlier check would be difficult since we don't want to break data modules
path_components = request.httprequest.path.split('/')
request.is_frontend = len(path_components) < 3 or path_components[2] != 'static' or not '.' in path_components[-1]
routing_error = e
request.is_frontend_multilang = not func or (func and request.is_frontend and func.routing.get('multilang', func.routing['type'] == 'http'))
@@ -2190,7 +2190,8 @@ QUnit.module('ActionManager', {
start: function () {
var self = this;
return this._super.apply(this, arguments).then(function () {
self.iframe.src = 'test ' + self.iframe.getAttribute('src');
self._rpc({route: self.iframe.getAttribute('src')});
self.iframe.setAttribute('src', 'about:blank');
});
}
});
@@ -2212,7 +2213,7 @@ QUnit.module('ActionManager', {
if (route === '/report/check_wkhtmltopdf') {
return Promise.resolve('broken');
}
if (route === 'test /report/html/some_report') {
if (route === '/report/html/some_report') {
return Promise.resolve();
}
return this._super.apply(this, arguments);
@@ -2233,7 +2234,7 @@ QUnit.module('ActionManager', {
'/web/action/load',
'/report/check_wkhtmltopdf',
'warning',
'test /report/html/some_report', // report client action's iframe
'/report/html/some_report', // report client action's iframe
]);
actionManager.destroy();
+2 -1
View File
@@ -253,7 +253,8 @@ class Http(models.AbstractModel):
parent = super(Http, cls)._serve_fallback(exception)
if parent: # attachment
return parent
if not request.is_frontend:
return False
website_page = cls._serve_page()
if website_page:
return website_page