1dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/* 2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2010 Apple Inc. All rights reserved. 3dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 4dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Redistribution and use in source and binary forms, with or without 5dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * modification, are permitted provided that the following conditions 6dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * are met: 7dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 1. Redistributions of source code must retain the above copyright 8dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * notice, this list of conditions and the following disclaimer. 9dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 2. Redistributions in binary form must reproduce the above copyright 10dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * notice, this list of conditions and the following disclaimer in the 11dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * documentation and/or other materials provided with the distribution. 12dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 13dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 14dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 17dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 19dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 20dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 22dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 24dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 25dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "config.h" 26dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "WebUserContentURLPattern.h" 27dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 28e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "MarshallingHelpers.h" 29e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke#include "WebKitDLL.h" 30e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 31dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <WebCore/BString.h> 32dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <WebCore/KURL.h> 33dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 34dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockusing namespace WebCore; 35dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 36dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockinline WebUserContentURLPattern::WebUserContentURLPattern() 37dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block : m_refCount(0) 38dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ++gClassCount; 40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block gClassNameCount.add("WebUserContentURLPattern"); 41dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebUserContentURLPattern::~WebUserContentURLPattern() 44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block --gClassCount; 46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block gClassNameCount.remove("WebUserContentURLPattern"); 47dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 48dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockCOMPtr<WebUserContentURLPattern> WebUserContentURLPattern::createInstance() 50dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 51dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return new WebUserContentURLPattern; 52dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockULONG WebUserContentURLPattern::AddRef() 55dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return ++m_refCount; 57dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockULONG WebUserContentURLPattern::Release() 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ULONG newRefCount = --m_refCount; 62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!newRefCount) 63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block delete this; 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return newRefCount; 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockHRESULT WebUserContentURLPattern::QueryInterface(REFIID riid, void** ppvObject) 68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!ppvObject) 70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return E_POINTER; 71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *ppvObject = 0; 72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (IsEqualIID(riid, __uuidof(WebUserContentURLPattern))) 74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *ppvObject = this; 75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else if (IsEqualIID(riid, __uuidof(IWebUserContentURLPattern))) 76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *ppvObject = static_cast<IWebUserContentURLPattern*>(this); 77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else if (IsEqualIID(riid, IID_IUnknown)) 78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *ppvObject = static_cast<IUnknown*>(this); 79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return E_NOINTERFACE; 81dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block AddRef(); 83dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return S_OK; 84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 85dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 86dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockHRESULT WebUserContentURLPattern::parse(BSTR patternString) 87dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 88dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_pattern = UserContentURLPattern(String(patternString, SysStringLen(patternString))); 89dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return S_OK; 90dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 91dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 92dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockHRESULT WebUserContentURLPattern::isValid(BOOL* isValid) 93dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 94dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!isValid) 95dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return E_POINTER; 96dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *isValid = m_pattern.isValid(); 97dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return S_OK; 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockHRESULT WebUserContentURLPattern::scheme(BSTR* scheme) 101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!scheme) 103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return E_POINTER; 104dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *scheme = BString(m_pattern.scheme()).release(); 105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return S_OK; 106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockHRESULT WebUserContentURLPattern::host(BSTR* host) 109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!host) 111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return E_POINTER; 112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *host = BString(m_pattern.host()).release(); 113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return S_OK; 114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 115dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockHRESULT WebUserContentURLPattern::matchesSubdomains(BOOL* matches) 117dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!matches) 119dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return E_POINTER; 120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block *matches = m_pattern.matchSubdomains(); 121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return S_OK; 122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 123e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 124e458d70a0d18538346f41b503114c9ebe6b2ce12Leon ClarkeHRESULT WebUserContentURLPattern::matchesURL(BSTR url, BOOL* matches) 125e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{ 126e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke if (!matches) 127e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke return E_POINTER; 128e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke *matches = m_pattern.matches(MarshallingHelpers::BSTRToKURL(url)); 129e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke return S_OK; 130e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 131