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