Fix for Bug #57985 r=hyatt,ddrinan a=hyat

Have HandleDOMEvent gather some information about mouse left button
  down events and pass it on to the entropy collector.
This commit is contained in:
javi%netscape.com 2000-10-30 23:33:34 +00:00
Родитель 54d0ebc2f9
Коммит 8c42fb78d0
4 изменённых файлов: 87 добавлений и 0 удалений

Просмотреть файл

@ -1,3 +1,4 @@
domstubs.idl domstubs.idl
nsIScriptContextOwner.idl nsIScriptContextOwner.idl
nsIScriptGlobalObjectOwner.idl nsIScriptGlobalObjectOwner.idl
nsIEntropyCollector.idl

Просмотреть файл

@ -27,6 +27,7 @@ DIRS=base coreDom coreEvents range events html css
XPIDLSRCS = .\domstubs.idl \ XPIDLSRCS = .\domstubs.idl \
.\nsIScriptContextOwner.idl \ .\nsIScriptContextOwner.idl \
.\nsIScriptGlobalObjectOwner.idl \ .\nsIScriptGlobalObjectOwner.idl \
.\nsIEntropyCollector.idl \
$(NULL) $(NULL)

Просмотреть файл

@ -0,0 +1,53 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is Mozilla code.
*
* Contributor(s):
* Javier Delgadillo <javi@netscape.com>
*/
#include "nsISupports.idl"
/**
* Interface for an object that wants to gather "random"
* data to be used for entropy purposes.
*/
%{C++
// Define CID {29a1d8b6-ac5a-11d4-9978-00b0d02354a0}
#define NS_ENTROPYCOLLECTOR_CID \
{ 0x29a1d8b6, 0xac5a, 0x11d4, \
{ 0x00, 0xb0, 0xd0, 0x23, 0x54, 0xa0 } }
/*
* If anyone wants to collect the entropy distributed by the
* event handler, they'll have to implement this CONTRACTID
*/
#define NS_ENTROPYCOLLECTOR_CONTRACTID "@mozilla.org/security/entropy;1"
%}
/* Buffer type - for passing random data to the entropy
* collector.
*/
[ptr] native buffer(void);
[uuid(6f883680-ab9d-11d4-9978-00b0d02354a0)]
interface nsIEntropyCollector : nsISupports
{
/**
* Add the following bytes to the pool of data to be used
* in gathering entropy.
*/
void randomUpdate(in buffer entropy, in long bufLen);
};

Просмотреть файл

@ -98,6 +98,7 @@
#include "nsIWebBrowserChrome.h" #include "nsIWebBrowserChrome.h"
#include "nsIWebShell.h" #include "nsIWebShell.h"
#include "nsIComputedDOMStyle.h" #include "nsIComputedDOMStyle.h"
#include "nsIEntropyCollector.h"
#include "nsDOMCID.h" #include "nsDOMCID.h"
#include "nsDOMError.h" #include "nsDOMError.h"
@ -109,6 +110,9 @@
#include "nsIXBLService.h" #include "nsIXBLService.h"
nsIEntropyCollector* gEntropyCollector = nsnull;
PRInt32 gRefCnt = 0;
// CIDs // CIDs
static NS_DEFINE_IID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID); static NS_DEFINE_IID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID); static NS_DEFINE_CID(kPrefServiceCID, NS_PREF_CID);
@ -138,6 +142,13 @@ GlobalWindowImpl::GlobalWindowImpl() :
mChromeEventHandler(nsnull) mChromeEventHandler(nsnull)
{ {
NS_INIT_REFCNT(); NS_INIT_REFCNT();
if (gRefCnt++ == 0) {
nsCOMPtr<nsIEntropyCollector> enCol(do_GetService(NS_ENTROPYCOLLECTOR_CONTRACTID));
if (enCol) {
gEntropyCollector = enCol;
NS_ADDREF(gEntropyCollector);
}
}
} }
GlobalWindowImpl::~GlobalWindowImpl() GlobalWindowImpl::~GlobalWindowImpl()
@ -163,6 +174,9 @@ void GlobalWindowImpl::CleanUp()
NS_IF_RELEASE(mLocation); NS_IF_RELEASE(mLocation);
NS_IF_RELEASE(mFrames); NS_IF_RELEASE(mFrames);
mOpener = nsnull; // Forces Release mOpener = nsnull; // Forces Release
if (--gRefCnt == 0) {
NS_IF_RELEASE(gEntropyCollector);
}
} }
//***************************************************************************** //*****************************************************************************
@ -473,6 +487,24 @@ NS_IMETHODIMP GlobalWindowImpl::HandleDOMEvent(nsIPresContext* aPresContext,
nsCOMPtr<nsIChromeEventHandler> kungFuDeathGrip1(mChromeEventHandler); nsCOMPtr<nsIChromeEventHandler> kungFuDeathGrip1(mChromeEventHandler);
nsCOMPtr<nsIScriptContext> kungFuDeathGrip2(mContext); nsCOMPtr<nsIScriptContext> kungFuDeathGrip2(mContext);
/* If this is a mouse event, use the struct to provide entropy for
* the system.
*/
if (gEntropyCollector && !mChromeEventHandler &&
(NS_EVENT_FLAG_BUBBLE != aFlags) &&
(aEvent->message == NS_MOUSE_LEFT_BUTTON_DOWN)) {
//Since the high bits seem to be zero's most of the time,
//let's only take the lowest half of the point structure.
PRInt16 myCoord[4];
myCoord[0] = aEvent->point.x;
myCoord[1] = aEvent->point.y;
myCoord[2] = aEvent->refPoint.x;
myCoord[3] = aEvent->refPoint.y;
gEntropyCollector->RandomUpdate((void*)myCoord, sizeof(myCoord));
gEntropyCollector->RandomUpdate((void*)&aEvent->time, sizeof(PRUint32));
}
if (NS_EVENT_FLAG_INIT & aFlags) { if (NS_EVENT_FLAG_INIT & aFlags) {
if (!aDOMEvent) { if (!aDOMEvent) {
aDOMEvent = &domEvent; aDOMEvent = &domEvent;