void Statistics::writeTimerFired() { ASSERT(RunLoop::isMain()); Vector<StringCapture> hashesToAdd; copyToVector(m_hashesToAdd, hashesToAdd); m_hashesToAdd.clear(); Vector<std::pair<StringCapture, StoreDecision>> storeDecisionsToAdd; copyToVector(m_storeDecisionsToAdd, storeDecisionsToAdd); m_storeDecisionsToAdd.clear(); shrinkIfNeeded(); serialBackgroundIOQueue().dispatch([this, hashesToAdd, storeDecisionsToAdd] { if (!m_database.isOpen()) return; WebCore::SQLiteTransactionInProgressAutoCounter transactionCounter; WebCore::SQLiteTransaction writeTransaction(m_database); writeTransaction.begin(); addHashesToDatabase(hashesToAdd); addStoreDecisionsToDatabase(storeDecisionsToAdd); writeTransaction.commit(); }); }
void EventPath::adjustForRelatedTarget(Node* target, EventTarget* relatedTarget) { if (!target) return; if (!relatedTarget) return; Node* relatedNode = relatedTarget->toNode(); if (!relatedNode) return; if (target->document() != relatedNode->document()) return; if (!target->inDocument() || !relatedNode->inDocument()) return; RelatedTargetMap relatedNodeMap; buildRelatedNodeMap(relatedNode, relatedNodeMap); for (size_t i = 0; i < m_treeScopeEventContexts.size(); ++i) { TreeScopeEventContext* treeScopeEventContext = m_treeScopeEventContexts[i].get(); EventTarget* adjustedRelatedTarget = findRelatedNode(&treeScopeEventContext->treeScope(), relatedNodeMap); ASSERT(adjustedRelatedTarget); treeScopeEventContext->setRelatedTarget(adjustedRelatedTarget); } shrinkIfNeeded(target, relatedTarget); }
void EventPath::adjustForRelatedTarget(Node& target, EventTarget* relatedTarget) { if (!relatedTarget) return; Node* relatedNode = relatedTarget->toNode(); if (!relatedNode) return; if (target.document() != relatedNode->document()) return; if (!target.inDocument() || !relatedNode->inDocument()) return; RelatedTargetMap relatedNodeMap; buildRelatedNodeMap(*relatedNode, relatedNodeMap); for (const auto& treeScopeEventContext : m_treeScopeEventContexts) { EventTarget* adjustedRelatedTarget = findRelatedNode(treeScopeEventContext->treeScope(), relatedNodeMap); ASSERT(adjustedRelatedTarget); treeScopeEventContext.get()->setRelatedTarget(adjustedRelatedTarget); } shrinkIfNeeded(target, *relatedTarget); }