unsigned LayoutTestController::worldIDForWorld(WKBundleScriptWorldRef world) { WorldMap::const_iterator end = worldMap().end(); for (WorldMap::const_iterator it = worldMap().begin(); it != end; ++it) { if (it->second == world) return it->first; } return 0; }
void WebUserContentController::removeUserStyleSheet(uint64_t worldIdentifier, uint64_t userStyleSheetIdentifier) { auto it = worldMap().find(worldIdentifier); if (it == worldMap().end()) { WTFLogAlways("Trying to remove a UserStyleSheet from a UserContentWorld (id=%" PRIu64 ") that does not exist.", worldIdentifier); return; } removeUserStyleSheetInternal(*it->value.first, userStyleSheetIdentifier); }
unsigned TestRunner::worldIDForWorld(WKBundleScriptWorldRef world) { WorldMap::const_iterator end = worldMap().end(); for (WorldMap::const_iterator it = worldMap().begin(); it != end; ++it) { if (it->value == world) return it->key; } return 0; }
void WebUserContentController::removeAllUserScripts(const Vector<uint64_t>& worldIdentifiers) { for (auto& worldIdentifier : worldIdentifiers) { auto it = worldMap().find(worldIdentifier); if (it == worldMap().end()) { WTFLogAlways("Trying to remove all UserScripts from a UserContentWorld (id=%" PRIu64 ") that does not exist.", worldIdentifier); return; } removeUserScripts(*it->value.first); } }
void WebUserContentController::addUserScripts(const Vector<WebUserScriptData>& userScripts) { for (const auto& userScriptData : userScripts) { auto it = worldMap().find(userScriptData.worldIdentifier); if (it == worldMap().end()) { WTFLogAlways("Trying to add a UserScript to a UserContentWorld (id=%" PRIu64 ") that does not exist.", userScriptData.worldIdentifier); continue; } UserScript script = userScriptData.userScript; addUserScriptInternal(*it->value.first, userScriptData.identifier, WTFMove(script)); } }
void WebUserContentController::removeUserScriptMessageHandler(uint64_t worldIdentifier, uint64_t userScriptMessageHandlerIdentifier) { #if ENABLE(USER_MESSAGE_HANDLERS) auto it = worldMap().find(worldIdentifier); if (it == worldMap().end()) { WTFLogAlways("Trying to remove a UserScriptMessageHandler from a UserContentWorld (id=%" PRIu64 ") that does not exist.", worldIdentifier); return; } removeUserScriptMessageHandlerInternal(*it->value.first, userScriptMessageHandlerIdentifier); #else UNUSED_PARAM(worldIdentifier); UNUSED_PARAM(userScriptMessageHandlerIdentifier); #endif }
void WebUserContentController::addUserStyleSheets(const Vector<WebUserStyleSheetData>& userStyleSheets) { for (const auto& userStyleSheetData : userStyleSheets) { auto it = worldMap().find(userStyleSheetData.worldIdentifier); if (it == worldMap().end()) { WTFLogAlways("Trying to add a UserStyleSheet to a UserContentWorld (id=%" PRIu64 ") that does not exist.", userStyleSheetData.worldIdentifier); continue; } UserStyleSheet sheet = userStyleSheetData.userStyleSheet; addUserStyleSheetInternal(*it->value.first, userStyleSheetData.identifier, WTFMove(sheet)); } invalidateInjectedStyleSheetCacheInAllFramesInAllPages(); }
void WebUserContentController::addUserScriptMessageHandlers(const Vector<WebScriptMessageHandlerData>& scriptMessageHandlers) { #if ENABLE(USER_MESSAGE_HANDLERS) for (auto& handler : scriptMessageHandlers) { auto it = worldMap().find(handler.worldIdentifier); if (it == worldMap().end()) { WTFLogAlways("Trying to add a UserScriptMessageHandler to a UserContentWorld (id=%" PRIu64 ") that does not exist.", handler.worldIdentifier); continue; } addUserScriptMessageHandlerInternal(*it->value.first, handler.identifier, handler.name); } #else UNUSED_PARAM(scriptMessageHandlers); #endif }
void WebUserContentController::removeAllUserStyleSheets(const Vector<uint64_t>& worldIdentifiers) { bool sheetsChanged = false; for (auto& worldIdentifier : worldIdentifiers) { auto it = worldMap().find(worldIdentifier); if (it == worldMap().end()) { WTFLogAlways("Trying to remove all UserStyleSheets from a UserContentWorld (id=%" PRIu64 ") that does not exist.", worldIdentifier); return; } if (m_userStyleSheets.remove(it->value.first.get())) sheetsChanged = true; } if (sheetsChanged) invalidateInjectedStyleSheetCacheInAllFramesInAllPages(); }
void WebUserContentController::addUserContentWorlds(const Vector<std::pair<uint64_t, String>>& worlds) { for (auto& world : worlds) { ASSERT(world.first); ASSERT(world.first != 1); worldMap().ensure(world.first, [&] { return std::make_pair(InjectedBundleScriptWorld::create(world.second), 1); }); } }
void WebUserContentController::removeUserContentWorlds(const Vector<uint64_t>& worldIdentifiers) { for (auto& worldIdentifier : worldIdentifiers) { ASSERT(worldIdentifier); ASSERT(worldIdentifier != 1); auto it = worldMap().find(worldIdentifier); if (it == worldMap().end()) { WTFLogAlways("Trying to remove a UserContentWorld (id=%" PRIu64 ") that is does not exist.", worldIdentifier); return; } it->value.second--; if (!it->value.second) worldMap().remove(it); } }
void WebUserContentController::removeAllUserScriptMessageHandlers(const Vector<uint64_t>& worldIdentifiers) { #if ENABLE(USER_MESSAGE_HANDLERS) bool userMessageHandlersChanged = false; for (auto& worldIdentifier : worldIdentifiers) { auto it = worldMap().find(worldIdentifier); if (it == worldMap().end()) { WTFLogAlways("Trying to remove all UserScriptMessageHandler from a UserContentWorld (id=%" PRIu64 ") that does not exist.", worldIdentifier); return; } if (m_userMessageHandlers.remove(it->value.first.get())) userMessageHandlersChanged = true; } if (userMessageHandlersChanged) invalidateAllRegisteredUserMessageHandlerInvalidationClients(); #else UNUSED_PARAM(worldIdentifiers); #endif }
void LayoutTestController::evaluateScriptInIsolatedWorld(JSContextRef context, unsigned worldID, JSStringRef script) { // A worldID of 0 always corresponds to a new world. Any other worldID corresponds to a world // that is created once and cached forever. WKRetainPtr<WKBundleScriptWorldRef> world; if (!worldID) world.adopt(WKBundleScriptWorldCreateWorld()); else { WKRetainPtr<WKBundleScriptWorldRef>& worldSlot = worldMap().add(worldID, 0).first->second; if (!worldSlot) worldSlot.adopt(WKBundleScriptWorldCreateWorld()); world = worldSlot; } WKBundleFrameRef frame = WKBundleFrameForJavaScriptContext(context); if (!frame) frame = WKBundlePageGetMainFrame(InjectedBundle::shared().page()->page()); JSGlobalContextRef jsContext = WKBundleFrameGetJavaScriptContextForWorld(frame, world.get()); JSEvaluateScript(jsContext, script, 0, 0, 0, 0); }