You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by ta...@apache.org on 2016/05/18 14:03:34 UTC
deltaspike git commit: DELTASPIKE-1144 added more logging, refactored,
added check if the window name is managed by DS
Repository: deltaspike
Updated Branches:
refs/heads/master a86c606a3 -> 726b4ed87
DELTASPIKE-1144 added more logging, refactored, added check if the window name is managed by DS
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/726b4ed8
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/726b4ed8
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/726b4ed8
Branch: refs/heads/master
Commit: 726b4ed879ccfbe3b48ad12bb1d9abd1c7bb766f
Parents: a86c606
Author: tandraschko <ta...@apache.org>
Authored: Wed May 18 16:03:02 2016 +0200
Committer: tandraschko <ta...@apache.org>
Committed: Wed May 18 16:03:02 2016 +0200
----------------------------------------------------------------------
.../resources/deltaspike/windowhandler.js | 199 +++++++++++--------
.../main/resources/static/windowhandler.html | 68 +++++--
2 files changed, 167 insertions(+), 100 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/726b4ed8/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js b/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
index 0833ffe..e6184af 100644
--- a/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
+++ b/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
@@ -20,6 +20,7 @@ window.dswh = window.dswh || {
DEBUG_MODE : false,
TEMP_WINDOW_NAME : 'tempWindowId',
+ MANAGED_WINDOW_NAME_PREFIX : 'ds-',
windowId : null,
clientWindowRenderMode : null,
@@ -28,11 +29,9 @@ window.dswh = window.dswh || {
init : function(windowId, clientWindowRenderMode, maxWindowIdLength, cfg) {
- if (dswh.DEBUG_MODE === true) {
- console.log('---- DeltaSpike WindowHandler ----');
- console.log('#init(\'' + windowId + '\', \'' + clientWindowRenderMode + '\',' + maxWindowIdLength + ',' + dswh.utils.stringify(cfg) + ')');
- console.log('window.name: ' + window.name);
- }
+ dswh.utils.log('------- DeltaSpike windowhandler.js -------');
+ dswh.utils.log('--- #init(\'' + windowId + '\', \'' + clientWindowRenderMode + '\',' + maxWindowIdLength + ',' + dswh.utils.stringify(cfg) + ')');
+ dswh.utils.log('window.name: ' + window.name);
this.windowId = windowId;
this.clientWindowRenderMode = clientWindowRenderMode;
@@ -45,26 +44,20 @@ window.dswh = window.dswh || {
var targetStrategy = this.strategy[clientWindowRenderMode];
if (targetStrategy) {
- if (dswh.DEBUG_MODE === true) {
- console.log(clientWindowRenderMode + ' #validate');
- }
+ dswh.utils.log('--- #validate');
targetStrategy.validate();
// early init
// this is required if e.g. the onload attr is defined on the body tag and our onload handler won't be called
// ATTENTION: the ds:windowId component must be placed as last body tag
- if (dswh.DEBUG_MODE === true) {
- console.log(clientWindowRenderMode + ' #init(false)');
- }
+ dswh.utils.log('--- #init(false)');
targetStrategy.init(false);
// JSF ajax callback
jsf.ajax.addOnEvent(function(event) {
if (event.status === "success") {
- if (dswh.DEBUG_MODE === true) {
- console.log(clientWindowRenderMode + ' #init(true)');
- }
+ dswh.utils.log('--- #init(true)');
targetStrategy.init(true);
}
});
@@ -72,9 +65,7 @@ window.dswh = window.dswh || {
// PF ajax callback
if (window.$ && window.PrimeFaces) {
$(document).on('pfAjaxComplete', function () {
- if (dswh.DEBUG_MODE === true) {
- console.log(clientWindowRenderMode + ' #init(true)');
- }
+ dswh.utils.log('--- #init(true)');
targetStrategy.init(true);
});
}
@@ -86,9 +77,7 @@ window.dswh = window.dswh || {
try {
(oldWindowOnLoad) ? oldWindowOnLoad(evt) : null;
} finally {
- if (dswh.DEBUG_MODE === true) {
- console.log(clientWindowRenderMode + ' #init(false)');
- }
+ dswh.utils.log('--- #init(false)');
targetStrategy.init(false);
}
};
@@ -112,10 +101,12 @@ window.dswh = window.dswh || {
},
assertWindowId : function() {
+ dswh.utils.log('--- #assertWindowId');
+
// ensure that windowIds get checked even if no windowhandler.html is used
- if (!window.name || window.name.length < 1) {
- window.name = dswh.TEMP_WINDOW_NAME;
- window.location = dswh.utils.setUrlParam(window.location.href, 'dswid', null);
+ if (!dswh.utils.isWindowNameDefined() || !dswh.utils.isManagedWindowName()) {
+ dswh.utils.log('window name not defined or unmanaged - request new windowId');
+ dswh.utils.requestNewWindowId();
}
},
@@ -124,6 +115,10 @@ window.dswh = window.dswh || {
var tokenizedRedirectEnabled = dswh.cfg.tokenizedRedirect;
var storeWindowTreeEnabled = dswh.utils.isHtml5() && dswh.cfg.storeWindowTreeOnLinkClick;
+ dswh.utils.log('--- #overwriteLinkOnClickEvents');
+ dswh.utils.log('tokenizedRedirect: ' + dswh.cfg.tokenizedRedirect);
+ dswh.utils.log('storeWindowTreeOnLinkClick: ' + dswh.cfg.storeWindowTreeOnLinkClick);
+
if (tokenizedRedirectEnabled || storeWindowTreeEnabled) {
var links = document.getElementsByTagName("a");
for (var i = 0; i < links.length; i++) {
@@ -177,6 +172,9 @@ window.dswh = window.dswh || {
var storeWindowTreeEnabled = dswh.utils.isHtml5() && dswh.cfg.storeWindowTreeOnButtonClick;
+ dswh.utils.log('--- #overwriteButtonOnClickEvents');
+ dswh.utils.log('storeWindowTreeOnButtonClick: ' + dswh.cfg.storeWindowTreeOnButtonClick);
+
if (storeWindowTreeEnabled) {
var inputs = document.getElementsByTagName("input");
for (var i = 0; i < inputs.length; i++) {
@@ -237,6 +235,9 @@ window.dswh = window.dswh || {
},
tokenizedRedirect : function(link) {
+
+ dswh.utils.log('--- #tokenizedRedirect');
+
var requestToken = dswh.utils.generateRequestToken();
dswh.utils.storeCookie('dsrwid-' + requestToken, dswh.windowId, 3);
window.location = dswh.utils.setUrlParam(link.href, 'dsrid', requestToken);
@@ -246,6 +247,9 @@ window.dswh = window.dswh || {
* store the current body in the html5 localstorage
*/
storeWindowTree : function() {
+
+ dswh.utils.log('--- #storeWindowTree');
+
// first we store all CSS we also need on the intermediate page
var headNodes = document.getElementsByTagName("head")[0].childNodes;
var oldSS = new Array();
@@ -285,6 +289,8 @@ window.dswh = window.dswh || {
},
cleanupCookies : function() {
+ dswh.utils.log('--- #cleanupCookies');
+
var dsrid = dswh.utils.getUrlParameter(window.location.href, 'dsrid');
if (dsrid) {
dswh.utils.expireCookie('dsrwid-' + dsrid);
@@ -306,90 +312,86 @@ window.dswh = window.dswh || {
assertWindowId : function() {
var dswid = dswh.utils.getUrlParameter(window.location.href, 'dswid');
- if (dswh.DEBUG_MODE === true) {
- console.log('dswid: ' + dswid);
- }
+ dswh.utils.log('--- #assertWindowId');
+ dswh.utils.log('dswid: ' + dswid);
- // window.name is null which means that "open in new tab/window" was used
- if (!window.name || window.name.length < 1) {
+ // window name is defined -> existing tab
+ if (dswh.utils.isWindowNameDefined()) {
- // url param available?
- if (dswid) {
- // initial redirect case
- // the windowId is valid - we don't need to a second request
- if (dswh.cfg.initialRedirectWindowId && dswid === dswh.cfg.initialRedirectWindowId) {
- window.name = dswh.cfg.initialRedirectWindowId;
+ // is the current window name a already managed by DS?
+ if (dswh.utils.isManagedWindowName()) {
- if (dswh.DEBUG_MODE === true) {
- console.log('overtake initialRedirectWindowId');
- }
- }
- else {
- // -- url param available, we must recreate a new windowId to be sure that it is new and valid --
+ var windowId = dswh.utils.getWindowIdFromWindowName();
+
+ // we triggered the windowId recreation last request
+ if (windowId === dswh.TEMP_WINDOW_NAME) {
+ // enabled initial redirect
+ // -> use the new windowId from the url
+ if (dswid) {
+ dswh.utils.log('assign window name from request parameter');
- if (dswh.DEBUG_MODE === true) {
- console.log('request new windowId');
+ dswh.utils.setWindowIdAsWindowName(dswid);
}
+ // disabled initial redirect
+ // -> use the new windowId from the rendered config as no url param is available
+ else {
+ dswh.utils.log('assign window name from server windowId');
- // set temp window name to remember the current state
- window.name = dswh.TEMP_WINDOW_NAME;
- // we remove the dswid if available and redirect to the same url again to create a new windowId
- window.location = dswh.utils.setUrlParam(window.location.href, 'dswid', null);
+ dswh.utils.setWindowIdAsWindowName(dswh.windowId);
+ }
}
- }
- else if (dswh.windowId) {
- // -- no dswid in the url -> an initial request without initial redirect --
+ // security check like on the server side
+ else if (windowId.length > dswh.maxWindowIdLength) {
+ dswh.utils.log('window id from window name exeeds maxWindowIdLength - request new windowId');
- // this means that the initial redirect is disabled and we can just use the windowId as window.name
- window.name = dswh.windowId;
+ dswh.utils.requestNewWindowId();
+ }
+ // window name doesn't match requested windowId
+ // -> redirect to the same view with current windowId from the window name
+ else if (windowId !== dswid) {
+ dswh.utils.log('reload url with window name');
- if (dswh.DEBUG_MODE === true) {
- console.log('assign window.name from windowId');
+ window.location = dswh.utils.setUrlParam(window.location.href, 'dswid', windowId);
}
}
+ else {
+ dswh.utils.log('window name is unmanaged - request new windowId');
+
+ dswh.utils.requestNewWindowId();
+ }
}
+ // window name is undefined -> "open in new tab/window" was used
else {
- if (window.name === dswh.TEMP_WINDOW_NAME) {
- if (dswid) {
- // we triggered the windowId recreation last request - use it now!
- window.name = dswid;
+ // url param available?
+ if (dswid) {
+ // initial redirect
+ // -> the windowId is valid - we don't need to a second request
+ if (dswh.cfg.initialRedirectWindowId && dswid === dswh.cfg.initialRedirectWindowId) {
+ dswh.utils.log('assign window name from initialRedirectWindowId');
- if (dswh.DEBUG_MODE === true) {
- console.log('assign window.name from request parameter');
- }
+ dswh.utils.setWindowIdAsWindowName(dswh.cfg.initialRedirectWindowId);
}
+ // != initial redirect
+ // -> request a new windowId to avoid multiple tabs with the same windowId
else {
- // it could be from dswh.windowId in case of open in new tab and initial redirect is disabled
- window.name = dswh.windowId;
+ dswh.utils.log('request new windowId');
- if (dswh.DEBUG_MODE === true) {
- console.log('assign window.name from windowId');
- }
+ dswh.utils.requestNewWindowId();
}
}
- else if (window.name.length > dswh.maxWindowIdLength) {
- if (dswh.DEBUG_MODE === true) {
- console.log('current window.name exeeds maxWindowIdLength - request new windowId');
- }
-
- // set temp window name to remember the current state
- window.name = dswh.TEMP_WINDOW_NAME;
- // we remove the dswid if available and redirect to the same url again to create a new windowId
- window.location = dswh.utils.setUrlParam(window.location.href, 'dswid', null);
- }
- else if (window.name !== dswid) {
- if (dswh.DEBUG_MODE === true) {
- console.log('reload view with window.name');
- }
+ // as no url parameter is available, the request is a new tab with disabled initial redirect
+ // -> just use the windowId from the renderer
+ else if (dswh.windowId) {
+ dswh.utils.log('assign window name from server windowId');
- // window.name doesn't match requested windowId
- // -> redirect to the same view with current window.name / windowId
- window.location = dswh.utils.setUrlParam(window.location.href, 'dswid', window.name);
+ dswh.utils.setWindowIdAsWindowName(dswh.windowId);
}
}
},
cleanupCookies : function() {
+ dswh.utils.log('--- #cleanupCookies');
+
var dswid = dswh.utils.getUrlParameter(window.location.href, 'dswid');
if (dswid) {
dswh.utils.expireCookie('dsrwid-' + dswid);
@@ -400,6 +402,33 @@ window.dswh = window.dswh || {
utils : {
+ isWindowNameDefined : function() {
+ return window.name && window.name.length > 0;
+ },
+
+ isManagedWindowName : function() {
+ if (!window.name) {
+ return false;
+ }
+
+ return window.name.indexOf(dswh.MANAGED_WINDOW_NAME_PREFIX) === 0;
+ },
+
+ getWindowIdFromWindowName : function() {
+ return window.name.substring(dswh.MANAGED_WINDOW_NAME_PREFIX.length);
+ },
+
+ setWindowIdAsWindowName : function(windowId) {
+ window.name = dswh.MANAGED_WINDOW_NAME_PREFIX + windowId;
+ },
+
+ requestNewWindowId : function() {
+ // set temp window name to remember the current state
+ dswh.utils.setWindowIdAsWindowName(dswh.TEMP_WINDOW_NAME);
+ // we remove the dswid if available and redirect to the same url again to create a new windowId
+ window.location = dswh.utils.setUrlParam(window.location.href, 'dswid', null);
+ },
+
isHtml5 : function() {
try {
return !!localStorage.getItem;
@@ -544,6 +573,12 @@ window.dswh = window.dswh || {
var expires = "; expires=" + expiresDate.toGMTString();
document.cookie = name + '=' + value + expires + "; path=/";
+ },
+
+ log : function(message) {
+ if (dswh.DEBUG_MODE === true) {
+ console.log(message);
+ }
}
}
};
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/726b4ed8/deltaspike/modules/jsf/impl/src/main/resources/static/windowhandler.html
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/resources/static/windowhandler.html b/deltaspike/modules/jsf/impl/src/main/resources/static/windowhandler.html
index b5bdf21..f8dd6b8 100644
--- a/deltaspike/modules/jsf/impl/src/main/resources/static/windowhandler.html
+++ b/deltaspike/modules/jsf/impl/src/main/resources/static/windowhandler.html
@@ -115,30 +115,62 @@
replaceContent();
window.onload = function() {
- // uncomment the following line to debug the intermediate page
- //if (!confirm('reload?')) { return true; }
+ if (dswh.DEBUG_MODE === true){
+ if (!confirm('reload?')) {
+ return true;
+ }
+ }
loadCss(true);
- var windowId = window.name;
- var urlId = windowId;
- if (!windowId || windowId.length < 1) {
- var newWindowId = '$$windowIdValue$$';
- if (newWindowId !== 'uninitializedWindowId') {
- window.name = newWindowId; // set the window.name with our windowId
- windowId = newWindowId;
- urlId = windowId;
+ var windowId = dswh.utils.getWindowIdFromWindowName();
+ var urlWindowId = windowId;
+
+ function requestNewWindowId() {
+ window.name = '';
+ windowId = 'automatedEntryPoint';
+ urlWindowId = null;
+ }
+
+ dswh.utils.log('------- DeltaSpike windowhandler.html -------');
+ dswh.utils.log('windowId: ' + windowId);
+ dswh.utils.log('window.name: ' + window.name);
+
+ if (dswh.utils.isWindowNameDefined()) {
+ if (!dswh.utils.isManagedWindowName()) {
+
+ dswh.utils.log('window name unmanaged - request new windowId');
+
+ requestNewWindowId();
}
else {
- windowId = 'automatedEntryPoint';
- urlId = null;
+ // occurs with the "duplicate tab" feature of chrome
+ if (windowId === dswh.TEMP_WINDOW_NAME) {
+
+ dswh.utils.log('window name is temporary - request new windowId');
+
+ requestNewWindowId();
+ }
}
}
- // occurs with the "duplicate tab" feature of chrome
- else if (windowId === dswh.TEMP_WINDOW_NAME) {
- window.name = '';
- windowId = 'automatedEntryPoint';
- urlId = null;
+ // window name is undefined, which means that "open in new tab/window" was used
+ else {
+ var newWindowId = '$$windowIdValue$$';
+
+ dswh.utils.log('newWindowId ' + newWindowId);
+
+ if (newWindowId === 'uninitializedWindowId') {
+ dswh.utils.log('windowId not initialized - request new windowId');
+
+ requestNewWindowId();
+ }
+ else {
+ dswh.utils.log('assign window name from newWindowId');
+
+ dswh.utils.setWindowIdAsWindowName(newWindowId); // set the window.name with our windowId
+ windowId = newWindowId;
+ urlWindowId = newWindowId;
+ }
}
var requestToken = dswh.utils.generateRequestToken();
@@ -146,7 +178,7 @@
var redirectUrl = '$$requestUrl$$';
redirectUrl = dswh.utils.setUrlParam(redirectUrl, "dsrid", requestToken);
// we still add the windowId page param to support lazy windowId dropping for some clients
- redirectUrl = dswh.utils.setUrlParam(redirectUrl, "dswid", urlId);
+ redirectUrl = dswh.utils.setUrlParam(redirectUrl, "dswid", urlWindowId);
dswh.utils.storeCookie('dsrwid-' + requestToken, windowId, 3);