Backout bug 445177
git-svn-id: svn://10.0.0.236/trunk@257492 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
d5327d59a8
commit
4a323c8168
@ -129,9 +129,7 @@ enum {
|
||||
|
||||
// Remaining bits are node type specific.
|
||||
NODE_TYPE_SPECIFIC_BITS_OFFSET =
|
||||
NODE_SCRIPT_TYPE_OFFSET + NODE_SCRIPT_TYPE_SIZE,
|
||||
|
||||
NODE_MAY_BE_LISTENER = 0x80000000U
|
||||
NODE_SCRIPT_TYPE_OFFSET + NODE_SCRIPT_TYPE_SIZE
|
||||
};
|
||||
|
||||
// Useful inline function for getting a node given an nsIContent and an
|
||||
|
||||
@ -684,13 +684,6 @@ nsXULDocument::SynchronizeBroadcastListener(nsIDOMElement *aBroadcaster,
|
||||
nsIDOMElement *aListener,
|
||||
const nsAString &aAttr)
|
||||
{
|
||||
if (!nsContentUtils::IsSafeToRunScript()) {
|
||||
nsDelayedBroadcastUpdate delayedUpdate(aBroadcaster, aListener,
|
||||
aAttr);
|
||||
mDelayedBroadcasters.AppendElement(delayedUpdate);
|
||||
MaybeBroadcast();
|
||||
return;
|
||||
}
|
||||
nsCOMPtr<nsIContent> broadcaster = do_QueryInterface(aBroadcaster);
|
||||
nsCOMPtr<nsIContent> listener = do_QueryInterface(aListener);
|
||||
|
||||
@ -837,8 +830,6 @@ nsXULDocument::AddBroadcastListenerFor(nsIDOMElement* aBroadcaster,
|
||||
if (! bl)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
nsCOMPtr<nsINode> listener = do_QueryInterface(aListener);
|
||||
listener->SetFlags(NODE_MAY_BE_LISTENER);
|
||||
bl->mListener = do_GetWeakReference(aListener);
|
||||
bl->mAttribute = attr;
|
||||
|
||||
@ -1730,21 +1721,6 @@ nsXULDocument::AddSubtreeToDocument(nsIContent* aElement)
|
||||
return AddElementToDocumentPost(aElement);
|
||||
}
|
||||
|
||||
PR_STATIC_CALLBACK(PLDHashOperator)
|
||||
RemoveListener(PLDHashTable* aTable, PLDHashEntryHdr* aHdr, PRUint32 aNumber,
|
||||
void* aArg)
|
||||
{
|
||||
BroadcasterMapEntry* entry = static_cast<BroadcasterMapEntry*>(aHdr);
|
||||
for (PRInt32 i = entry->mListeners.Count() - 1; i >= 0; --i) {
|
||||
BroadcastListener* bl = static_cast<BroadcastListener*>(entry->mListeners[i]);
|
||||
nsCOMPtr<nsIDOMElement> listener = do_QueryReferent(bl->mListener);
|
||||
if (listener == static_cast<nsIDOMElement*>(aArg)) {
|
||||
entry->mListeners.RemoveElementAt(i);
|
||||
}
|
||||
}
|
||||
return PL_DHASH_NEXT;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULDocument::RemoveSubtreeFromDocument(nsIContent* aElement)
|
||||
{
|
||||
@ -1785,9 +1761,12 @@ nsXULDocument::RemoveSubtreeFromDocument(nsIContent* aElement)
|
||||
|
||||
// 4. Remove the element from our broadcaster map, since it is no longer
|
||||
// in the document.
|
||||
if (mBroadcasterMap && aElement->HasFlag(NODE_MAY_BE_LISTENER)) {
|
||||
nsCOMPtr<nsIDOMElement> listener = do_QueryInterface(aElement);
|
||||
PL_DHashTableEnumerate(mBroadcasterMap, RemoveListener, listener);
|
||||
nsCOMPtr<nsIDOMElement> broadcaster, listener;
|
||||
nsAutoString attribute, broadcasterID;
|
||||
rv = FindBroadcaster(aElement, getter_AddRefs(listener),
|
||||
broadcasterID, attribute, getter_AddRefs(broadcaster));
|
||||
if (rv == NS_FINDBROADCASTER_FOUND) {
|
||||
RemoveBroadcastListenerFor(broadcaster, listener, attribute);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
@ -3258,36 +3237,6 @@ nsXULDocument::StyleSheetLoaded(nsICSSStyleSheet* aSheet,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
nsXULDocument::MaybeBroadcast()
|
||||
{
|
||||
// Only broadcast when not in an update and when safe to run scripts.
|
||||
if (mUpdateNestLevel == 0 && mDelayedBroadcasters.Length()) {
|
||||
if (!nsContentUtils::IsSafeToRunScript()) {
|
||||
if (!mInDestructor) {
|
||||
nsContentUtils::AddScriptRunner(
|
||||
NS_NEW_RUNNABLE_METHOD(nsXULDocument, this, MaybeBroadcast));
|
||||
}
|
||||
return;
|
||||
}
|
||||
PRUint32 length = mDelayedBroadcasters.Length();
|
||||
nsTArray<nsDelayedBroadcastUpdate> delayedBroadcasters;
|
||||
mDelayedBroadcasters.SwapElements(delayedBroadcasters);
|
||||
for (PRUint32 i = 0; i < length; ++i) {
|
||||
SynchronizeBroadcastListener(delayedBroadcasters[i].mBroadcaster,
|
||||
delayedBroadcasters[i].mListener,
|
||||
delayedBroadcasters[i].mAttr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
nsXULDocument::EndUpdate(nsUpdateType aUpdateType)
|
||||
{
|
||||
nsXMLDocument::EndUpdate(aUpdateType);
|
||||
MaybeBroadcast();
|
||||
}
|
||||
|
||||
void
|
||||
nsXULDocument::ReportMissingOverlay(nsIURI* aURI)
|
||||
{
|
||||
|
||||
@ -152,8 +152,6 @@ public:
|
||||
PRBool aWasAlternate,
|
||||
nsresult aStatus);
|
||||
|
||||
virtual void EndUpdate(nsUpdateType aUpdateType);
|
||||
|
||||
static PRBool
|
||||
MatchAttribute(nsIContent* aContent,
|
||||
PRInt32 aNameSpaceID,
|
||||
@ -674,27 +672,6 @@ protected:
|
||||
nsInterfaceHashtable<nsURIHashKey,nsIObserver> mPendingOverlayLoadNotifications;
|
||||
|
||||
PRBool mInitialLayoutComplete;
|
||||
|
||||
class nsDelayedBroadcastUpdate
|
||||
{
|
||||
public:
|
||||
nsDelayedBroadcastUpdate(nsIDOMElement* aBroadcaster,
|
||||
nsIDOMElement* aListener,
|
||||
const nsAString &aAttr)
|
||||
: mBroadcaster(aBroadcaster), mListener(aListener), mAttr(aAttr) {}
|
||||
|
||||
nsDelayedBroadcastUpdate(const nsDelayedBroadcastUpdate& aOther)
|
||||
: mBroadcaster(aOther.mBroadcaster), mListener(aOther.mListener),
|
||||
mAttr(aOther.mAttr) {}
|
||||
|
||||
nsCOMPtr<nsIDOMElement> mBroadcaster;
|
||||
nsCOMPtr<nsIDOMElement> mListener;
|
||||
nsString mAttr;
|
||||
};
|
||||
|
||||
nsTArray<nsDelayedBroadcastUpdate> mDelayedBroadcasters;
|
||||
|
||||
void MaybeBroadcast();
|
||||
private:
|
||||
// helpers
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user