From 112c23a046ea1290080287e4fba89313bf82e711 Mon Sep 17 00:00:00 2001 From: Sergey Yanovich Date: Tue, 18 Dec 2007 16:28:00 +0200 Subject: [PATCH] [view] Make 'SHistory.queryBuffer' read-only (bug #92) --- abstract/view/aaISHistory.idl | 2 +- app/aaTestAccountViews.js | 12 ------------ app/aaTestVC.js | 14 +------------- app/aaTestVC.jsm | 6 ------ app/chrome/content/flow.js | 27 ++++++++++++++++++--------- app/chrome/content/page1.js | 8 +++++++- app/chrome/content/page1.xul | 2 +- app/chrome/content/transcript.js | 1 - app/chrome/content/transfer.js | 2 -- view/aaSessionHistory.cpp | 21 +++++++++------------ view/aaSessionHistory.h | 2 +- 11 files changed, 38 insertions(+), 59 deletions(-) diff --git a/abstract/view/aaISHistory.idl b/abstract/view/aaISHistory.idl index 5803dc9..e5ba7d1 100644 --- a/abstract/view/aaISHistory.idl +++ b/abstract/view/aaISHistory.idl @@ -32,6 +32,6 @@ interface aaISHistory : nsISupports { void beginQuery(); readonly attribute boolean choosing; - attribute nsISupports queryBuffer; + readonly attribute nsISupports queryBuffer; attribute nsISupports choice; }; diff --git a/app/aaTestAccountViews.js b/app/aaTestAccountViews.js index 6fd476b..9bdcb15 100644 --- a/app/aaTestAccountViews.js +++ b/app/aaTestAccountViews.js @@ -194,8 +194,6 @@ function transcript_flow_discard_check(runner) transcript_check(runner); if (getElement(runner, "filter.flow").value != "click to choose") runner.addJSFailure("[transcript->flow] discard failed"); - if (! session_buffer_check(runner)) - runner.addJSFailure("session buffer not cleared"); } const tf_submit_contractID = "@aasii.org/test/transcript-flow-submit;1"; @@ -205,8 +203,6 @@ const tf_submit_CID = Components.ID("{3197a8bb-1fd1-453e-98d8-6bc7996552a5}"); function transcript_flow_submit_check(runner) { transcript_check(runner); - if (! session_buffer_check(runner)) - runner.addJSFailure("session buffer not cleared"); if (getElement(runner, "filter.flow").value != "bank account 1") runner.addJSFailure("[transcript->flow] submit failed"); } @@ -425,8 +421,6 @@ function transfer_from_discard_check(runner) if (getElement(runner, "transfer.fromFlow").value != "junk") runner.addJSFailure("[transfer->fromFlow] discard failed"); - if (! session_buffer_check(runner)) - runner.addJSFailure("session buffer not cleared"); } const transfer_from_submit_contractID = "@aasii.org/test/transfer-from-submit;1"; @@ -438,8 +432,6 @@ function transfer_from_submit_check(runner) if (! transfer_check(runner)) runner.addJSFailure("[transfer->fromFlow] wrong page init"); - if (! session_buffer_check(runner)) - runner.addJSFailure("session buffer not cleared"); if (getElement(runner, "transfer.fromFlow").value != "purchase contract 1") runner.addJSFailure("[transfer->fromFlow] submit failed:" + getElement(runner, "transfer.fromFlow").value); @@ -467,8 +459,6 @@ function transfer_to_discard_check(runner) if (getElement(runner, "transfer.toFlow").value != "junk") runner.addJSFailure("[transfer->toFlow] discard failed"); - if (! session_buffer_check(runner)) - runner.addJSFailure("session buffer not cleared"); } const transfer_to_submit_contractID = "@aasii.org/test/transfer-to-submit;1"; @@ -480,8 +470,6 @@ function transfer_to_submit_check(runner) if (! transfer_check(runner)) runner.addJSFailure("[transfer->toFlow] wrong page init"); - if (! session_buffer_check(runner)) - runner.addJSFailure("session buffer not cleared"); if (getElement(runner, "transfer.toFlow").value != "equipment storage 1") runner.addJSFailure("[transfer->toFlow] submit failed:" + getElement(runner, "transfer.toFlow").value); diff --git a/app/aaTestVC.js b/app/aaTestVC.js index f255527..c618cbc 100644 --- a/app/aaTestVC.js +++ b/app/aaTestVC.js @@ -478,8 +478,6 @@ function entity_discard_check(runner) flow_check(runner); if (getElement(runner, entityTagId).value != "") runner.addJSFailure("entity discard failed"); - if (! session_buffer_check(runner)) - runner.addJSFailure("session buffer not cleared"); } const entity_submit_contractID = "@aasii.org/abstract/test/entity-submit;1"; @@ -491,8 +489,6 @@ function entity_submit_check(runner) flow_check(runner); if (getElement(runner, entityTagId).value != "Sergey") runner.addJSFailure("entity submit failed"); - if (! session_buffer_check(runner)) - runner.addJSFailure("session buffer not cleared"); } /* submit/discard from entity page */ @@ -582,8 +578,6 @@ function give_discard_check(runner) flow_check(runner); if (getElement(runner, "give.tag").value != "") runner.addJSFailure("resource dsicard failed"); - if (! session_buffer_check(runner)) - runner.addJSFailure("session buffer not cleared"); } const give_submit_contractID = "@aasii.org/abstract/test/give-submit;1"; @@ -595,8 +589,6 @@ function give_submit_check(runner) flow_check(runner); if (getElement(runner, "give.tag").value != "RUB") runner.addJSFailure("resource submit failed"); - if (! session_buffer_check(runner)) - runner.addJSFailure("session buffer not cleared"); } /* ask for take resource from flow page */ @@ -619,9 +611,7 @@ function take_discard_check(runner) { flow_check(runner); if (getElement(runner, "take.tag").value != "") - runner.addJSFailure("resource dsicard failed"); - if (! session_buffer_check(runner)) - runner.addJSFailure("session buffer not cleared"); + runner.addJSFailure("resource discard failed"); } const take_submit_contractID = "@aasii.org/abstract/test/take-submit;1"; @@ -633,8 +623,6 @@ function take_submit_check(runner) flow_check(runner); if (getElement(runner, "take.tag").value != "EUR") runner.addJSFailure("resource submit failed"); - if (! session_buffer_check(runner)) - runner.addJSFailure("session buffer not cleared"); } const flow_save_contractID = "@aasii.org/abstract/test/flow-save;1"; diff --git a/app/aaTestVC.jsm b/app/aaTestVC.jsm index 42e7ba6..a3d2c15 100644 --- a/app/aaTestVC.jsm +++ b/app/aaTestVC.jsm @@ -163,9 +163,3 @@ function flow_check(runner) if (! flow_details_check(runner)) runner.addJSFailure("[flow] page not synched"); } - -function session_buffer_check(runner) -{ - return ! getFrame(runner).docShell.QueryInterface(nsCI.nsIWebNavigation) - .sessionHistory.QueryInterface(nsCI.aaISession).queryBuffer; -} diff --git a/app/chrome/content/flow.js b/app/chrome/content/flow.js index 3b95460..cea5a4c 100644 --- a/app/chrome/content/flow.js +++ b/app/chrome/content/flow.js @@ -56,9 +56,12 @@ function chosenEntity() { removeEventListener("pageshow", chosenEntity, true); var buffer = session().queryBuffer; - session().queryBuffer = null; - gDetails.buffer.QueryInterface(nsCI.aaIFlow).entity = buffer - ? buffer.QueryInterface(nsCI.aaIEntity) : null; + try { + gDetails.buffer.QueryInterface(nsCI.aaIFlow).entity = + buffer.QueryInterface(nsCI.aaIEntity) + } catch (e) { + gDetails.buffer.QueryInterface(nsCI.aaIFlow).entity = null; + } gDetails.load(); page1SaveUpdate(); } @@ -74,9 +77,12 @@ function chosenGiveResource() { removeEventListener("pageshow", chosenGiveResource, true); var buffer = session().queryBuffer; - session().queryBuffer = null; - gDetails.buffer.QueryInterface(nsCI.aaIFlow).giveResource = buffer - ? buffer.QueryInterface(nsCI.aaIResource) : null; + try { + gDetails.buffer.QueryInterface(nsCI.aaIFlow).giveResource = + buffer.QueryInterface(nsCI.aaIResource) + } catch (e) { + gDetails.buffer.QueryInterface(nsCI.aaIFlow).giveResource = null; + } gDetails.load(); page1SaveUpdate(); } @@ -92,9 +98,12 @@ function chosenTakeResource() { removeEventListener("pageshow", chosenTakeResource, true); var buffer = session().queryBuffer; - session().queryBuffer = null; - gDetails.buffer.QueryInterface(nsCI.aaIFlow).takeResource = buffer - ? buffer.QueryInterface(nsCI.aaIResource) : null; + try { + gDetails.buffer.QueryInterface(nsCI.aaIFlow).takeResource = + buffer.QueryInterface(nsCI.aaIResource) + } catch (e) { + gDetails.buffer.QueryInterface(nsCI.aaIFlow).takeResource = null; + } gDetails.load(); page1SaveUpdate(); } diff --git a/app/chrome/content/page1.js b/app/chrome/content/page1.js index 73d4fc7..62a5d95 100644 --- a/app/chrome/content/page1.js +++ b/app/chrome/content/page1.js @@ -222,9 +222,15 @@ function page1Save() page1Update(true); } +function page1Discard() +{ + session().choice = null; + goBack(); +} + function page1Submit() { - session().queryBuffer = gDetails.array.queryElementAt(gDetails.index, + session().choice = gDetails.array.queryElementAt(gDetails.index, nsCI.nsISupports); goBack(); } diff --git a/app/chrome/content/page1.xul b/app/chrome/content/page1.xul index a33c5d6..d36c165 100644 --- a/app/chrome/content/page1.xul +++ b/app/chrome/content/page1.xul @@ -27,7 +27,7 @@ observes="page1.editSet"/> - diff --git a/app/chrome/content/transcript.js b/app/chrome/content/transcript.js index b74b53a..ce2d996 100644 --- a/app/chrome/content/transcript.js +++ b/app/chrome/content/transcript.js @@ -102,7 +102,6 @@ function choosenFlow() { removeEventListener("pageshow", choosenFlow, true); var buffer = session().queryBuffer; - session().queryBuffer = null; gReport.flow = buffer ? buffer.QueryInterface(nsCI.aaIFlow) : null; diff --git a/app/chrome/content/transfer.js b/app/chrome/content/transfer.js index 57cadeb..2b920b4 100644 --- a/app/chrome/content/transfer.js +++ b/app/chrome/content/transfer.js @@ -100,7 +100,6 @@ function chosenFrom() { removeEventListener("pageshow", chosenFrom, true); var buffer = session().queryBuffer; - session().queryBuffer = null; if (buffer) gFact.takeFrom = buffer.QueryInterface(nsCI.aaIFlow); @@ -111,7 +110,6 @@ function chosenTo() { removeEventListener("pageshow", chosenTo, true); var buffer = session().queryBuffer; - session().queryBuffer = null; if (buffer) gFact.giveTo = buffer.QueryInterface(nsCI.aaIFlow); diff --git a/view/aaSessionHistory.cpp b/view/aaSessionHistory.cpp index 384f404..4c357f4 100644 --- a/view/aaSessionHistory.cpp +++ b/view/aaSessionHistory.cpp @@ -143,14 +143,11 @@ NS_IMETHODIMP aaSessionHistory::GetQueryBuffer(nsISupports * *aQueryBuffer) { NS_ENSURE_ARG_POINTER(aQueryBuffer); - NS_IF_ADDREF(*aQueryBuffer = mQueryBuffer); - return NS_OK; -} -NS_IMETHODIMP -aaSessionHistory::SetQueryBuffer(nsISupports * aQueryBuffer) -{ - mQueryBuffer = aQueryBuffer; - return NS_OK; + nsresult rv; + nsCOMPtr pv1 = getter_AddRefs( getDestination(0, rv) ); + NS_ENSURE_TRUE(pv1, rv); + + return pv1->GetQueryChoice(aQueryBuffer); } NS_IMETHODIMP @@ -158,7 +155,7 @@ aaSessionHistory::GetChoice(nsISupports * *aChoice) { NS_ENSURE_ARG_POINTER(aChoice); nsresult rv; - nsCOMPtr pv0 = getter_AddRefs( getDestination(rv) ); + nsCOMPtr pv0 = getter_AddRefs( getDestination(-1, rv) ); NS_ENSURE_TRUE(pv0, rv); return pv0->GetQueryChoice(aChoice); @@ -167,7 +164,7 @@ NS_IMETHODIMP aaSessionHistory::SetChoice(nsISupports * aChoice) { nsresult rv; - nsCOMPtr pv0 = getter_AddRefs( getDestination(rv) ); + nsCOMPtr pv0 = getter_AddRefs( getDestination(-1, rv) ); NS_ENSURE_TRUE(pv0, rv); return pv0->SetQueryChoice(aChoice); @@ -175,14 +172,14 @@ aaSessionHistory::SetChoice(nsISupports * aChoice) /* Private methods */ aaIPageView * -aaSessionHistory::getDestination(nsresult &rv) +aaSessionHistory::getDestination(PRInt32 offset, nsresult &rv) { PRInt32 index; rv = mSH->GetIndex(&index); NS_ENSURE_SUCCESS(rv, nsnull); nsCOMPtr he0; - rv = mSH->GetEntryAtIndex(index - 1, PR_FALSE, getter_AddRefs( he0 )); + rv = mSH->GetEntryAtIndex(index + offset, PR_FALSE, getter_AddRefs( he0 )); NS_ENSURE_SUCCESS(rv, nsnull); aaIPageView *pv0; diff --git a/view/aaSessionHistory.h b/view/aaSessionHistory.h index 5f185b8..0dcdd81 100644 --- a/view/aaSessionHistory.h +++ b/view/aaSessionHistory.h @@ -64,7 +64,7 @@ private: PRBool mChoosing; nsCOMPtr mQueryBuffer; - aaIPageView* getDestination(nsresult &rv); + aaIPageView* getDestination(PRInt32 offset, nsresult &rv); }; #endif /* AASESSIONHISTORY_H */ -- 2.11.4.GIT