All of lore.kernel.org
 help / color / mirror / Atom feed
* [review-request][PATCH 0/3][v2] Prevent stale data in ToasterTables
@ 2015-10-01  9:33 Elliot Smith
  2015-10-01  9:33 ` [review-request][PATCH 1/3] toaster: Don't add new history entries when table data loads Elliot Smith
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Elliot Smith @ 2015-10-01  9:33 UTC (permalink / raw)
  To: toaster

Prevent incorrect caching of ToasterTable data so it doesn't go
stale as the user navigates browser history with back/forward.

v2: Remove code to push and pop context data into the browser history,
as we now just make fresh requests to the server instead.

Changes since poky-contrib/toaster-next @ 97e5625bb7b8f8de8fda0fb4dd188bf107a5f4fa are in:
git://git.yoctoproject.org/poky-contrib, elliot/toaster/bad_caching-7660
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=elliot/toaster/bad_caching-7660

Related bug: https://bugzilla.yoctoproject.org/show_bug.cgi?id=7660

Elliot Smith (3):
  toaster: Don't add new history entries when table data loads
  toaster: Don't HTTP cache ToasterTable responses
  toaster: Don't store table data in the browser

 bitbake/lib/toaster/toastergui/static/js/table.js | 12 ------------
 bitbake/lib/toaster/toastergui/widgets.py         |  6 ++++++
 2 files changed, 6 insertions(+), 12 deletions(-)

--
Elliot Smith
Software Engineer
Intel OTC

---------------------------------------------------------------------
Intel Corporation (UK) Limited
Registered No. 1134945 (England)
Registered Office: Pipers Way, Swindon SN3 1RJ
VAT No: 860 2173 47

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [review-request][PATCH 1/3] toaster: Don't add new history entries when table data loads
  2015-10-01  9:33 [review-request][PATCH 0/3][v2] Prevent stale data in ToasterTables Elliot Smith
@ 2015-10-01  9:33 ` Elliot Smith
  2015-10-01  9:33 ` [review-request][PATCH 2/3] toaster: Don't HTTP cache ToasterTable responses Elliot Smith
  2015-10-01  9:33 ` [review-request][PATCH 3/3] toaster: Don't store table data in the browser Elliot Smith
  2 siblings, 0 replies; 5+ messages in thread
From: Elliot Smith @ 2015-10-01  9:33 UTC (permalink / raw)
  To: toaster

When ToasterTable data is loaded into the UI, a new entry is
added to the browser history. This means that pressing the back
button appears to have no effect, as you end up at the same page,
possibly with slightly different data.

Instead, use replaceState(), so that the browser history doesn't
grow, but the page context still gets updated.

[YOCTO #7660]

Signed-off-by: Elliot Smith <elliot.smith@intel.com>
---
 bitbake/lib/toaster/toastergui/static/js/table.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bitbake/lib/toaster/toastergui/static/js/table.js b/bitbake/lib/toaster/toastergui/static/js/table.js
index f18034d..99b99a0 100644
--- a/bitbake/lib/toaster/toastergui/static/js/table.js
+++ b/bitbake/lib/toaster/toastergui/static/js/table.js
@@ -49,7 +49,7 @@ function tableInit(ctx){
         headers: { 'X-CSRFToken' : $.cookie('csrftoken')},
         success: function(tableData) {
           updateTable(tableData);
-          window.history.pushState({
+          window.history.replaceState({
               tableData: tableData,
               tableParams: tableParams
           }, null, libtoaster.dumpsUrlParams(tableParams));
-- 
Elliot Smith
Software Engineer
Intel OTC

---------------------------------------------------------------------
Intel Corporation (UK) Limited
Registered No. 1134945 (England)
Registered Office: Pipers Way, Swindon SN3 1RJ
VAT No: 860 2173 47

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [review-request][PATCH 2/3] toaster: Don't HTTP cache ToasterTable responses
  2015-10-01  9:33 [review-request][PATCH 0/3][v2] Prevent stale data in ToasterTables Elliot Smith
  2015-10-01  9:33 ` [review-request][PATCH 1/3] toaster: Don't add new history entries when table data loads Elliot Smith
@ 2015-10-01  9:33 ` Elliot Smith
  2015-10-01  9:33 ` [review-request][PATCH 3/3] toaster: Don't store table data in the browser Elliot Smith
  2 siblings, 0 replies; 5+ messages in thread
From: Elliot Smith @ 2015-10-01  9:33 UTC (permalink / raw)
  To: toaster

Django allows generated pages to be cached by default by the
browser. This can result in stale data displaying for some pages.

Instead, disable HTTP caching of ToasterTable responses, so that
each time a ToasterTable view is displayed, its data is
refreshed. This carries a performance penalty, but ensures that
ToasterTable views (e.g. compatible layers) are correctly
refreshed if the user navigates their history with forward/back.

[YOCTO #7660]

Signed-off-by: Elliot Smith <elliot.smith@intel.com>
---
 bitbake/lib/toaster/toastergui/widgets.py | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/bitbake/lib/toaster/toastergui/widgets.py b/bitbake/lib/toaster/toastergui/widgets.py
index e58dd7c..6bb3889 100644
--- a/bitbake/lib/toaster/toastergui/widgets.py
+++ b/bitbake/lib/toaster/toastergui/widgets.py
@@ -20,6 +20,7 @@
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 from django.views.generic import View, TemplateView
+from django.views.decorators.cache import cache_control
 from django.shortcuts import HttpResponse
 from django.http import HttpResponseBadRequest
 from django.core import serializers
@@ -64,6 +65,11 @@ class ToasterTable(TemplateView):
                         orderable=True,
                         field_name="id")
 
+        # prevent HTTP caching of table data
+    @cache_control(must_revalidate=True, max_age=0, no_store=True, no_cache=True)
+    def dispatch(self, *args, **kwargs):
+        return super(ToasterTable, self).dispatch(*args, **kwargs)
+
     def get_context_data(self, **kwargs):
         context = super(ToasterTable, self).get_context_data(**kwargs)
         context['title'] = self.title
-- 
Elliot Smith
Software Engineer
Intel OTC

---------------------------------------------------------------------
Intel Corporation (UK) Limited
Registered No. 1134945 (England)
Registered Office: Pipers Way, Swindon SN3 1RJ
VAT No: 860 2173 47

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [review-request][PATCH 3/3] toaster: Don't store table data in the browser
  2015-10-01  9:33 [review-request][PATCH 0/3][v2] Prevent stale data in ToasterTables Elliot Smith
  2015-10-01  9:33 ` [review-request][PATCH 1/3] toaster: Don't add new history entries when table data loads Elliot Smith
  2015-10-01  9:33 ` [review-request][PATCH 2/3] toaster: Don't HTTP cache ToasterTable responses Elliot Smith
@ 2015-10-01  9:33 ` Elliot Smith
  2015-10-06 16:08   ` Michael Wood
  2 siblings, 1 reply; 5+ messages in thread
From: Elliot Smith @ 2015-10-01  9:33 UTC (permalink / raw)
  To: toaster

As table data is no longer loaded from the history stack
(it's refreshed from the server on navigation), remove
the onpopstate event handler and the code which pushes
the page data onto the stack.

[YOCTO #7660]

Signed-off-by: Elliot Smith <elliot.smith@intel.com>
---
 bitbake/lib/toaster/toastergui/static/js/table.js | 12 ------------
 1 file changed, 12 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/static/js/table.js b/bitbake/lib/toaster/toastergui/static/js/table.js
index 99b99a0..b30b552 100644
--- a/bitbake/lib/toaster/toastergui/static/js/table.js
+++ b/bitbake/lib/toaster/toastergui/static/js/table.js
@@ -33,14 +33,6 @@ function tableInit(ctx){
 
   loadData(tableParams);
 
-  window.onpopstate = function(event){
-    if (event.state){
-      tableParams = event.state.tableParams;
-      /* We skip loadData and just update the table */
-      updateTable(event.state.tableData);
-    }
-  };
-
   function loadData(tableParams){
     $.ajax({
         type: "GET",
@@ -49,10 +41,6 @@ function tableInit(ctx){
         headers: { 'X-CSRFToken' : $.cookie('csrftoken')},
         success: function(tableData) {
           updateTable(tableData);
-          window.history.replaceState({
-              tableData: tableData,
-              tableParams: tableParams
-          }, null, libtoaster.dumpsUrlParams(tableParams));
         }
     });
   }
-- 
Elliot Smith
Software Engineer
Intel OTC

---------------------------------------------------------------------
Intel Corporation (UK) Limited
Registered No. 1134945 (England)
Registered Office: Pipers Way, Swindon SN3 1RJ
VAT No: 860 2173 47

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [review-request][PATCH 3/3] toaster: Don't store table data in the browser
  2015-10-01  9:33 ` [review-request][PATCH 3/3] toaster: Don't store table data in the browser Elliot Smith
@ 2015-10-06 16:08   ` Michael Wood
  0 siblings, 0 replies; 5+ messages in thread
From: Michael Wood @ 2015-10-06 16:08 UTC (permalink / raw)
  To: toaster

Just for the record this patch set was submitted upstream (I updated the 
wrong thread)

Michael

On 01/10/15 10:33, Elliot Smith wrote:
> As table data is no longer loaded from the history stack
> (it's refreshed from the server on navigation), remove
> the onpopstate event handler and the code which pushes
> the page data onto the stack.
>
> [YOCTO #7660]
>
> Signed-off-by: Elliot Smith <elliot.smith@intel.com>
> ---
>   bitbake/lib/toaster/toastergui/static/js/table.js | 12 ------------
>   1 file changed, 12 deletions(-)
>
> diff --git a/bitbake/lib/toaster/toastergui/static/js/table.js b/bitbake/lib/toaster/toastergui/static/js/table.js
> index 99b99a0..b30b552 100644
> --- a/bitbake/lib/toaster/toastergui/static/js/table.js
> +++ b/bitbake/lib/toaster/toastergui/static/js/table.js
> @@ -33,14 +33,6 @@ function tableInit(ctx){
>   
>     loadData(tableParams);
>   
> -  window.onpopstate = function(event){
> -    if (event.state){
> -      tableParams = event.state.tableParams;
> -      /* We skip loadData and just update the table */
> -      updateTable(event.state.tableData);
> -    }
> -  };
> -
>     function loadData(tableParams){
>       $.ajax({
>           type: "GET",
> @@ -49,10 +41,6 @@ function tableInit(ctx){
>           headers: { 'X-CSRFToken' : $.cookie('csrftoken')},
>           success: function(tableData) {
>             updateTable(tableData);
> -          window.history.replaceState({
> -              tableData: tableData,
> -              tableParams: tableParams
> -          }, null, libtoaster.dumpsUrlParams(tableParams));
>           }
>       });
>     }



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-10-06 16:08 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-01  9:33 [review-request][PATCH 0/3][v2] Prevent stale data in ToasterTables Elliot Smith
2015-10-01  9:33 ` [review-request][PATCH 1/3] toaster: Don't add new history entries when table data loads Elliot Smith
2015-10-01  9:33 ` [review-request][PATCH 2/3] toaster: Don't HTTP cache ToasterTable responses Elliot Smith
2015-10-01  9:33 ` [review-request][PATCH 3/3] toaster: Don't store table data in the browser Elliot Smith
2015-10-06 16:08   ` Michael Wood

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.