OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011, Google Inc. All rights reserved. | 2 * Copyright (C) 2011, Google Inc. All rights reserved. |
3 * Copyright (C) 2012, Samsung Electronics. All rights reserved. | 3 * Copyright (C) 2012, Samsung Electronics. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 exceptionState.throwSecurityError("The scheme '" + scheme + "' is le
ss than five characters long."); | 112 exceptionState.throwSecurityError("The scheme '" + scheme + "' is le
ss than five characters long."); |
113 return false; | 113 return false; |
114 } | 114 } |
115 | 115 |
116 if (isProtocolWhitelisted(scheme)) | 116 if (isProtocolWhitelisted(scheme)) |
117 return true; | 117 return true; |
118 exceptionState.throwSecurityError("The scheme '" + scheme + "' doesn't belon
g to the protocol whitelist. Please prefix non-whitelisted schemes with the stri
ng 'web+'."); | 118 exceptionState.throwSecurityError("The scheme '" + scheme + "' doesn't belon
g to the protocol whitelist. Please prefix non-whitelisted schemes with the stri
ng 'web+'."); |
119 return false; | 119 return false; |
120 } | 120 } |
121 | 121 |
122 NavigatorContentUtils* NavigatorContentUtils::from(Page* page) | 122 NavigatorContentUtils* NavigatorContentUtils::from(Page& page) |
123 { | 123 { |
124 return static_cast<NavigatorContentUtils*>(RefCountedSupplement<Page, Naviga
torContentUtils>::from(page, NavigatorContentUtils::supplementName())); | 124 return static_cast<NavigatorContentUtils*>(RefCountedSupplement<Page, Naviga
torContentUtils>::from(page, NavigatorContentUtils::supplementName())); |
125 } | 125 } |
126 | 126 |
127 NavigatorContentUtils::~NavigatorContentUtils() | 127 NavigatorContentUtils::~NavigatorContentUtils() |
128 { | 128 { |
129 } | 129 } |
130 | 130 |
131 PassRefPtr<NavigatorContentUtils> NavigatorContentUtils::create(NavigatorContent
UtilsClient* client) | 131 PassRefPtr<NavigatorContentUtils> NavigatorContentUtils::create(NavigatorContent
UtilsClient* client) |
132 { | 132 { |
133 return adoptRef(new NavigatorContentUtils(client)); | 133 return adoptRef(new NavigatorContentUtils(client)); |
134 } | 134 } |
135 | 135 |
136 void NavigatorContentUtils::registerProtocolHandler(Navigator* navigator, const
String& scheme, const String& url, const String& title, ExceptionState& exceptio
nState) | 136 void NavigatorContentUtils::registerProtocolHandler(Navigator& navigator, const
String& scheme, const String& url, const String& title, ExceptionState& exceptio
nState) |
137 { | 137 { |
138 if (!navigator->frame()) | 138 if (!navigator.frame()) |
139 return; | 139 return; |
140 | 140 |
141 Document* document = navigator->frame()->document(); | 141 Document* document = navigator.frame()->document(); |
142 if (!document) | 142 if (!document) |
143 return; | 143 return; |
144 | 144 |
145 KURL baseURL = document->baseURL(); | 145 KURL baseURL = document->baseURL(); |
146 | 146 |
147 if (!verifyCustomHandlerURL(baseURL, url, exceptionState)) | 147 if (!verifyCustomHandlerURL(baseURL, url, exceptionState)) |
148 return; | 148 return; |
149 | 149 |
150 if (!verifyProtocolHandlerScheme(scheme, "registerProtocolHandler", exceptio
nState)) | 150 if (!verifyProtocolHandlerScheme(scheme, "registerProtocolHandler", exceptio
nState)) |
151 return; | 151 return; |
152 | 152 |
153 NavigatorContentUtils::from(navigator->frame()->page())->client()->registerP
rotocolHandler(scheme, baseURL, KURL(ParsedURLString, url), title); | 153 ASSERT(navigator.frame()->page()); |
| 154 NavigatorContentUtils::from(*navigator.frame()->page())->client()->registerP
rotocolHandler(scheme, baseURL, KURL(ParsedURLString, url), title); |
154 } | 155 } |
155 | 156 |
156 static String customHandlersStateString(const NavigatorContentUtilsClient::Custo
mHandlersState state) | 157 static String customHandlersStateString(const NavigatorContentUtilsClient::Custo
mHandlersState state) |
157 { | 158 { |
158 DEFINE_STATIC_LOCAL(const String, newHandler, ("new")); | 159 DEFINE_STATIC_LOCAL(const String, newHandler, ("new")); |
159 DEFINE_STATIC_LOCAL(const String, registeredHandler, ("registered")); | 160 DEFINE_STATIC_LOCAL(const String, registeredHandler, ("registered")); |
160 DEFINE_STATIC_LOCAL(const String, declinedHandler, ("declined")); | 161 DEFINE_STATIC_LOCAL(const String, declinedHandler, ("declined")); |
161 | 162 |
162 switch (state) { | 163 switch (state) { |
163 case NavigatorContentUtilsClient::CustomHandlersNew: | 164 case NavigatorContentUtilsClient::CustomHandlersNew: |
164 return newHandler; | 165 return newHandler; |
165 case NavigatorContentUtilsClient::CustomHandlersRegistered: | 166 case NavigatorContentUtilsClient::CustomHandlersRegistered: |
166 return registeredHandler; | 167 return registeredHandler; |
167 case NavigatorContentUtilsClient::CustomHandlersDeclined: | 168 case NavigatorContentUtilsClient::CustomHandlersDeclined: |
168 return declinedHandler; | 169 return declinedHandler; |
169 } | 170 } |
170 | 171 |
171 ASSERT_NOT_REACHED(); | 172 ASSERT_NOT_REACHED(); |
172 return String(); | 173 return String(); |
173 } | 174 } |
174 | 175 |
175 String NavigatorContentUtils::isProtocolHandlerRegistered(Navigator* navigator,
const String& scheme, const String& url, ExceptionState& exceptionState) | 176 String NavigatorContentUtils::isProtocolHandlerRegistered(Navigator& navigator,
const String& scheme, const String& url, ExceptionState& exceptionState) |
176 { | 177 { |
177 DEFINE_STATIC_LOCAL(const String, declined, ("declined")); | 178 DEFINE_STATIC_LOCAL(const String, declined, ("declined")); |
178 | 179 |
179 if (!navigator->frame()) | 180 if (!navigator.frame()) |
180 return declined; | 181 return declined; |
181 | 182 |
182 Document* document = navigator->frame()->document(); | 183 Document* document = navigator.frame()->document(); |
183 KURL baseURL = document->baseURL(); | 184 KURL baseURL = document->baseURL(); |
184 | 185 |
185 if (!verifyCustomHandlerURL(baseURL, url, exceptionState)) | 186 if (!verifyCustomHandlerURL(baseURL, url, exceptionState)) |
186 return declined; | 187 return declined; |
187 | 188 |
188 if (!verifyProtocolHandlerScheme(scheme, "isProtocolHandlerRegistered", exce
ptionState)) | 189 if (!verifyProtocolHandlerScheme(scheme, "isProtocolHandlerRegistered", exce
ptionState)) |
189 return declined; | 190 return declined; |
190 | 191 |
191 return customHandlersStateString(NavigatorContentUtils::from(navigator->fram
e()->page())->client()->isProtocolHandlerRegistered(scheme, baseURL, KURL(Parsed
URLString, url))); | 192 ASSERT(navigator.frame()->page()); |
| 193 return customHandlersStateString(NavigatorContentUtils::from(*navigator.fram
e()->page())->client()->isProtocolHandlerRegistered(scheme, baseURL, KURL(Parsed
URLString, url))); |
192 } | 194 } |
193 | 195 |
194 void NavigatorContentUtils::unregisterProtocolHandler(Navigator* navigator, cons
t String& scheme, const String& url, ExceptionState& exceptionState) | 196 void NavigatorContentUtils::unregisterProtocolHandler(Navigator& navigator, cons
t String& scheme, const String& url, ExceptionState& exceptionState) |
195 { | 197 { |
196 if (!navigator->frame()) | 198 if (!navigator.frame()) |
197 return; | 199 return; |
198 | 200 |
199 Document* document = navigator->frame()->document(); | 201 Document* document = navigator.frame()->document(); |
200 KURL baseURL = document->baseURL(); | 202 KURL baseURL = document->baseURL(); |
201 | 203 |
202 if (!verifyCustomHandlerURL(baseURL, url, exceptionState)) | 204 if (!verifyCustomHandlerURL(baseURL, url, exceptionState)) |
203 return; | 205 return; |
204 | 206 |
205 if (!verifyProtocolHandlerScheme(scheme, "unregisterProtocolHandler", except
ionState)) | 207 if (!verifyProtocolHandlerScheme(scheme, "unregisterProtocolHandler", except
ionState)) |
206 return; | 208 return; |
207 | 209 |
208 NavigatorContentUtils::from(navigator->frame()->page())->client()->unregiste
rProtocolHandler(scheme, baseURL, KURL(ParsedURLString, url)); | 210 ASSERT(navigator.frame()->page()); |
| 211 NavigatorContentUtils::from(*navigator.frame()->page())->client()->unregiste
rProtocolHandler(scheme, baseURL, KURL(ParsedURLString, url)); |
209 } | 212 } |
210 | 213 |
211 const char* NavigatorContentUtils::supplementName() | 214 const char* NavigatorContentUtils::supplementName() |
212 { | 215 { |
213 return "NavigatorContentUtils"; | 216 return "NavigatorContentUtils"; |
214 } | 217 } |
215 | 218 |
216 void provideNavigatorContentUtilsTo(Page* page, NavigatorContentUtilsClient* cli
ent) | 219 void provideNavigatorContentUtilsTo(Page& page, NavigatorContentUtilsClient* cli
ent) |
217 { | 220 { |
218 RefCountedSupplement<Page, NavigatorContentUtils>::provideTo(page, Navigator
ContentUtils::supplementName(), NavigatorContentUtils::create(client)); | 221 RefCountedSupplement<Page, NavigatorContentUtils>::provideTo(page, Navigator
ContentUtils::supplementName(), NavigatorContentUtils::create(client)); |
219 } | 222 } |
220 | 223 |
221 } // namespace WebCore | 224 } // namespace WebCore |
OLD | NEW |