From 7ddb9c1082ec2141af0babd67c7b131ffaa72282 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Tue, 2 Jun 2015 06:43:15 +0200
Subject: [PATCH] downloadable: Always set content-disposition: inline when
 displaying inline

A previous operation might have poluted the request
---
 .../Base_renderSimpleView.xml                         | 11 ++++++++---
 .../erp5_deferred_style_core/Base_report.xml          |  9 +++++++--
 product/ERP5/mixin/downloadable.py                    |  2 ++
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_renderSimpleView.xml b/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_renderSimpleView.xml
index 6f4cfd7c62..56c39209b2 100644
--- a/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_renderSimpleView.xml
+++ b/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_renderSimpleView.xml
@@ -62,9 +62,14 @@ if skin_name and skin_name != \'None\': # make_query serializes None as \'None\'
 with portal.Localizer.translationContext(localizer_language):\n
   report_data = getattr(context, deferred_style_dialog_method)(**params)\n
 \n
-  attachment_name = [x[len(\' filename=\'):] for x in (request.RESPONSE.getHeader(\n
-                          \'content-disposition\') or \'\').split(\';\')\n
-                        if x.startswith(\' filename=\')][0]\n
+  attachment_name_list = [x[len(\' filename=\'):] for x in (request.RESPONSE.getHeader(\n
+                        \'content-disposition\') or \'\').split(\';\')\n
+                            if x.startswith(\' filename=\')]\n
+  if attachment_name_list:\n
+    attachment_name, = attachment_name_list\n
+  else:\n
+    assert \'inline\' in (request.RESPONSE.getHeader(\'content-disposition\') or \'\')\n
+    attachment_name = \'index.html\'\n
   if attachment_name.startswith(\'"\'):\n
     attachment_name = attachment_name[1:]\n
   if attachment_name.endswith(\'"\'):\n
diff --git a/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_report.xml b/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_report.xml
index c87386eab5..a0aa85ad38 100644
--- a/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_report.xml
+++ b/bt5/erp5_deferred_style/SkinTemplateItem/portal_skins/erp5_deferred_style_core/Base_report.xml
@@ -82,9 +82,14 @@ with portal.Localizer.translationContext(localizer_language):\n
                          report_method=dummyReportMethod,\n
                          form=portal.restrictedTraverse(form_path)))\n
 \n
-  attachment_name = [x[len(\' filename=\'):] for x in (request.RESPONSE.getHeader(\n
+  attachment_name_list = [x[len(\' filename=\'):] for x in (request.RESPONSE.getHeader(\n
                         \'content-disposition\') or \'\').split(\';\')\n
-                      if x.startswith(\' filename=\')][0]\n
+                            if x.startswith(\' filename=\')]\n
+  if attachment_name_list:\n
+    attachment_name, = attachment_name_list\n
+  else:\n
+    assert \'inline\' in (request.RESPONSE.getHeader(\'content-disposition\') or \'\')\n
+    attachment_name = \'index.html\'\n
   if attachment_name.startswith(\'"\'):\n
     attachment_name = attachment_name[1:]\n
   if attachment_name.endswith(\'"\'):\n
diff --git a/product/ERP5/mixin/downloadable.py b/product/ERP5/mixin/downloadable.py
index 3f1c574e7c..9f97426db6 100644
--- a/product/ERP5/mixin/downloadable.py
+++ b/product/ERP5/mixin/downloadable.py
@@ -127,6 +127,8 @@ class DownloadableMixin:
       RESPONSE.setHeader('Content-Disposition',
                          'attachment; filename="%s"' % filename)
       RESPONSE.setHeader('Accept-Ranges', 'bytes')
+    else:
+      RESPONSE.setHeader('Content-Disposition', 'inline')
     return str(data)
 
   security.declareProtected(Permissions.AccessContentsInformation,
-- 
2.30.9