summaryrefslogtreecommitdiff
path: root/Source/WebCore/html/PublicURLManager.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/html/PublicURLManager.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/html/PublicURLManager.cpp')
-rw-r--r--Source/WebCore/html/PublicURLManager.cpp54
1 files changed, 40 insertions, 14 deletions
diff --git a/Source/WebCore/html/PublicURLManager.cpp b/Source/WebCore/html/PublicURLManager.cpp
index 2bf7d70cf..20504b9b6 100644
--- a/Source/WebCore/html/PublicURLManager.cpp
+++ b/Source/WebCore/html/PublicURLManager.cpp
@@ -26,43 +26,69 @@
#include "config.h"
#include "PublicURLManager.h"
-
-#if ENABLE(BLOB)
-
#include "URL.h"
#include "URLRegistry.h"
#include <wtf/text/StringHash.h>
namespace WebCore {
-void PublicURLManager::registerURL(SecurityOrigin* origin, const URL& url, URLRegistrable* registrable)
+std::unique_ptr<PublicURLManager> PublicURLManager::create(ScriptExecutionContext* context)
+{
+ auto publicURLManager = std::make_unique<PublicURLManager>(context);
+ publicURLManager->suspendIfNeeded();
+ return publicURLManager;
+}
+
+PublicURLManager::PublicURLManager(ScriptExecutionContext* context)
+ : ActiveDOMObject(context)
+ , m_isStopped(false)
+{
+}
+
+void PublicURLManager::registerURL(SecurityOrigin* origin, const URL& url, URLRegistrable& registrable)
{
- RegistryURLMap::iterator found = m_registryToURL.add(&registrable->registry(), URLSet()).iterator;
+ if (m_isStopped)
+ return;
+
+ RegistryURLMap::iterator found = m_registryToURL.add(&registrable.registry(), URLSet()).iterator;
found->key->registerURL(origin, url, registrable);
found->value.add(url.string());
}
void PublicURLManager::revoke(const URL& url)
{
- for (RegistryURLMap::iterator i = m_registryToURL.begin(); i != m_registryToURL.end(); ++i) {
- if (i->value.contains(url.string())) {
- i->key->unregisterURL(url);
- i->value.remove(url.string());
+ for (auto& registry : m_registryToURL) {
+ if (registry.value.contains(url.string())) {
+ registry.key->unregisterURL(url);
+ registry.value.remove(url.string());
break;
}
}
}
-void PublicURLManager::contextDestroyed()
+void PublicURLManager::stop()
{
- for (RegistryURLMap::iterator i = m_registryToURL.begin(); i != m_registryToURL.end(); ++i) {
- for (URLSet::iterator j = i->value.begin(); j != i->value.end(); ++j)
- i->key->unregisterURL(URL(ParsedURLString, *j));
+ if (m_isStopped)
+ return;
+
+ m_isStopped = true;
+ for (auto& registry : m_registryToURL) {
+ for (auto& url : registry.value)
+ registry.key->unregisterURL(URL(ParsedURLString, url));
}
m_registryToURL.clear();
}
+bool PublicURLManager::canSuspendForDocumentSuspension() const
+{
+ // Suspending an PublicURLManager is safe as it does not cause any JS to be executed.
+ return true;
+}
+
+const char* PublicURLManager::activeDOMObjectName() const
+{
+ return "PublicURLManager";
}
-#endif // ENABLE(BLOB)
+} // namespace WebCore