diff options
Diffstat (limited to 'Source/WebCore/html/DOMURL.cpp')
-rw-r--r-- | Source/WebCore/html/DOMURL.cpp | 126 |
1 files changed, 88 insertions, 38 deletions
diff --git a/Source/WebCore/html/DOMURL.cpp b/Source/WebCore/html/DOMURL.cpp index 3d65fc51c..1a5cd62ec 100644 --- a/Source/WebCore/html/DOMURL.cpp +++ b/Source/WebCore/html/DOMURL.cpp @@ -1,80 +1,130 @@ /* + * Copyright (C) 1999 Lars Knoll (knoll@kde.org) + * (C) 1999 Antti Koivisto (koivisto@kde.org) + * (C) 2000 Simon Hausmann <hausmann@kde.org> + * Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010, 2014 Apple Inc. All rights reserved. + * (C) 2006 Graham Dennis (graham.dennis@gmail.com) * Copyright (C) 2011 Google Inc. All rights reserved. * Copyright (C) 2012 Motorola Mobility Inc. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #include "config.h" - -#if ENABLE(BLOB) - #include "DOMURL.h" #include "ActiveDOMObject.h" #include "Blob.h" #include "BlobURL.h" +#include "ExceptionCode.h" #include "MemoryCache.h" #include "PublicURLManager.h" #include "ResourceRequest.h" #include "ScriptExecutionContext.h" #include "SecurityOrigin.h" +#include "URLSearchParams.h" #include <wtf/MainThread.h> namespace WebCore { -String DOMURL::createObjectURL(ScriptExecutionContext* scriptExecutionContext, Blob* blob) +inline DOMURL::DOMURL(URL&& completeURL, URL&& baseURL) + : m_baseURL(WTFMove(baseURL)) + , m_url(WTFMove(completeURL)) +{ +} + +ExceptionOr<Ref<DOMURL>> DOMURL::create(const String& url, const String& base) +{ + URL baseURL { URL { }, base }; + if (!baseURL.isValid()) + return Exception { TypeError }; + URL completeURL { baseURL, url }; + if (!completeURL.isValid()) + return Exception { TypeError }; + return adoptRef(*new DOMURL(WTFMove(completeURL), WTFMove(baseURL))); +} + +ExceptionOr<Ref<DOMURL>> DOMURL::create(const String& url, const DOMURL& base) +{ + return create(url, base.href()); +} + +ExceptionOr<Ref<DOMURL>> DOMURL::create(const String& url) +{ + URL baseURL { blankURL() }; + URL completeURL { baseURL, url }; + if (!completeURL.isValid()) + return Exception { TypeError }; + return adoptRef(*new DOMURL(WTFMove(completeURL), WTFMove(baseURL))); +} + +DOMURL::~DOMURL() +{ + if (m_searchParams) + m_searchParams->associatedURLDestroyed(); +} + +ExceptionOr<void> DOMURL::setHref(const String& url) +{ + URL completeURL { m_baseURL, url }; + if (!completeURL.isValid()) + return Exception { TypeError }; + m_url = WTFMove(completeURL); + if (m_searchParams) + m_searchParams->updateFromAssociatedURL(); + return { }; +} + +void DOMURL::setQuery(const String& query) +{ + m_url.setQuery(query); +} + +String DOMURL::createObjectURL(ScriptExecutionContext& scriptExecutionContext, Blob& blob) { - if (!scriptExecutionContext || !blob) - return String(); return createPublicURL(scriptExecutionContext, blob); } -String DOMURL::createPublicURL(ScriptExecutionContext* scriptExecutionContext, URLRegistrable* registrable) +String DOMURL::createPublicURL(ScriptExecutionContext& scriptExecutionContext, URLRegistrable& registrable) { - URL publicURL = BlobURL::createPublicURL(scriptExecutionContext->securityOrigin()); + URL publicURL = BlobURL::createPublicURL(scriptExecutionContext.securityOrigin()); if (publicURL.isEmpty()) return String(); - scriptExecutionContext->publicURLManager().registerURL(scriptExecutionContext->securityOrigin(), publicURL, registrable); + scriptExecutionContext.publicURLManager().registerURL(scriptExecutionContext.securityOrigin(), publicURL, registrable); return publicURL.string(); } -void DOMURL::revokeObjectURL(ScriptExecutionContext* scriptExecutionContext, const String& urlString) +URLSearchParams& DOMURL::searchParams() +{ + if (!m_searchParams) + m_searchParams = URLSearchParams::create(search(), this); + return *m_searchParams; +} + +void DOMURL::revokeObjectURL(ScriptExecutionContext& scriptExecutionContext, const String& urlString) { - if (!scriptExecutionContext) - return; - URL url(URL(), urlString); ResourceRequest request(url); -#if ENABLE(CACHE_PARTITIONING) - request.setCachePartition(scriptExecutionContext->topOrigin()->cachePartition()); -#endif - MemoryCache::removeRequestFromCache(scriptExecutionContext, request); + request.setDomainForCachePartition(scriptExecutionContext.topOrigin().domainForCachePartition()); + + MemoryCache::removeRequestFromSessionCaches(scriptExecutionContext, request); - scriptExecutionContext->publicURLManager().revoke(url); + scriptExecutionContext.publicURLManager().revoke(url); } } // namespace WebCore - -#endif // ENABLE(BLOB) |