void WebProcess::plugInDidReceiveUserInteraction(const String& pageOrigin, const String& pluginOrigin, const String& mimeType, SessionID sessionID) { if (pageOrigin.isEmpty()) return; unsigned plugInOriginHash = hashForPlugInOrigin(pageOrigin, pluginOrigin, mimeType); if (!plugInOriginHash) return; HashMap<WebCore::SessionID, HashMap<unsigned, double>>::const_iterator sessionIterator = m_plugInAutoStartOriginHashes.find(sessionID); HashMap<unsigned, double>::const_iterator it; bool contains = false; if (sessionIterator != m_plugInAutoStartOriginHashes.end()) { it = sessionIterator->value.find(plugInOriginHash); contains = it != sessionIterator->value.end(); } if (!contains) { sessionIterator = m_plugInAutoStartOriginHashes.find(SessionID::defaultSessionID()); it = sessionIterator->value.find(plugInOriginHash); if (it == sessionIterator->value.end()) return; } if (it->value - currentTime() > plugInAutoStartExpirationTimeUpdateThreshold) return; parentProcessConnection()->send(Messages::WebProcessPool::PlugInDidReceiveUserInteraction(plugInOriginHash, sessionID), 0); }
bool WebProcess::shouldPlugInAutoStartFromOrigin(const WebPage* page, const String& pageOrigin, const String& pluginOrigin, const String& mimeType) { if (m_plugInAutoStartOrigins.contains(pluginOrigin)) return true; #ifdef ENABLE_PRIMARY_SNAPSHOTTED_PLUGIN_HEURISTIC // The plugin wasn't in the general whitelist, so check if it similar to the primary plugin for the page (if we've found one). if (page && page->matchesPrimaryPlugIn(pageOrigin, pluginOrigin, mimeType)) return true; #else UNUSED_PARAM(page); #endif // Lastly check against the more explicit hash list. return isPlugInAutoStartOriginHash(hashForPlugInOrigin(pageOrigin, pluginOrigin, mimeType)); }
void WebProcess::plugInDidReceiveUserInteraction(const String& pageOrigin, const String& pluginOrigin, const String& mimeType) { if (pageOrigin.isEmpty()) return; unsigned plugInOriginHash = hashForPlugInOrigin(pageOrigin, pluginOrigin, mimeType); if (!plugInOriginHash) return; HashMap<unsigned, double>::iterator it = m_plugInAutoStartOriginHashes.find(plugInOriginHash); if (it == m_plugInAutoStartOriginHashes.end()) return; if (it->value - currentTime() > plugInAutoStartExpirationTimeUpdateThreshold) return; parentProcessConnection()->send(Messages::WebContext::PlugInDidReceiveUserInteraction(plugInOriginHash), 0); }
void WebProcess::plugInDidStartFromOrigin(const String& pageOrigin, const String& pluginOrigin, const String& mimeType) { if (pageOrigin.isEmpty()) { LOG(Plugins, "Not adding empty page origin"); return; } unsigned plugInOriginHash = hashForPlugInOrigin(pageOrigin, pluginOrigin, mimeType); if (isPlugInAutoStartOriginHash(plugInOriginHash)) { LOG(Plugins, "Hash %x already exists as auto-start origin (request for %s)", plugInOriginHash, pageOrigin.utf8().data()); return; } // We might attempt to start another plugin before the didAddPlugInAutoStartOrigin message // comes back from the parent process. Temporarily add this hash to the list with a thirty // second timeout. That way, even if the parent decides not to add it, we'll only be // incorrect for a little while. m_plugInAutoStartOriginHashes.set(plugInOriginHash, currentTime() + 30 * 1000); parentProcessConnection()->send(Messages::WebContext::AddPlugInAutoStartOriginHash(pageOrigin, plugInOriginHash), 0); }