| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 #include "modules/serviceworkers/Headers.h" | 6 #include "modules/serviceworkers/Headers.h" |
| 7 | 7 |
| 8 #include "bindings/core/v8/Dictionary.h" | 8 #include "bindings/core/v8/Dictionary.h" |
| 9 #include "bindings/core/v8/DictionaryHelper.h" |
| 9 #include "bindings/core/v8/ExceptionState.h" | 10 #include "bindings/core/v8/ExceptionState.h" |
| 10 #include "core/fetch/CrossOriginAccessControl.h" | 11 #include "core/fetch/CrossOriginAccessControl.h" |
| 11 #include "core/xml/XMLHttpRequest.h" | 12 #include "core/xml/XMLHttpRequest.h" |
| 12 #include "modules/serviceworkers/HeadersForEachCallback.h" | 13 #include "modules/serviceworkers/HeadersForEachCallback.h" |
| 13 #include "wtf/NotFound.h" | 14 #include "wtf/NotFound.h" |
| 14 #include "wtf/PassRefPtr.h" | 15 #include "wtf/PassRefPtr.h" |
| 15 #include "wtf/RefPtr.h" | 16 #include "wtf/RefPtr.h" |
| 16 #include "wtf/text/WTFString.h" | 17 #include "wtf/text/WTFString.h" |
| 17 | 18 |
| 18 namespace WebCore { | 19 namespace WebCore { |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 object.getOwnPropertyNames(keys); | 239 object.getOwnPropertyNames(keys); |
| 239 if (keys.size() == 0) | 240 if (keys.size() == 0) |
| 240 return; | 241 return; |
| 241 | 242 |
| 242 // Because of the restrictions in IDL compiler of blink we recieve | 243 // Because of the restrictions in IDL compiler of blink we recieve |
| 243 // sequence<sequence<ByteString>> as a Dictionary, which is a type of union | 244 // sequence<sequence<ByteString>> as a Dictionary, which is a type of union |
| 244 // type of HeadersInit defined in the spec. | 245 // type of HeadersInit defined in the spec. |
| 245 // http://fetch.spec.whatwg.org/#headers-class | 246 // http://fetch.spec.whatwg.org/#headers-class |
| 246 // FIXME: Support sequence<sequence<ByteString>>. | 247 // FIXME: Support sequence<sequence<ByteString>>. |
| 247 Vector<String> keyValuePair; | 248 Vector<String> keyValuePair; |
| 248 if (object.get(keys[0], keyValuePair)) { | 249 if (DictionaryHelper::get(object, keys[0], keyValuePair)) { |
| 249 // "2. Otherwise, if |object| is a sequence, then for each |header| in | 250 // "2. Otherwise, if |object| is a sequence, then for each |header| in |
| 250 // |object|, run these substeps: | 251 // |object|, run these substeps: |
| 251 // 1. If |header| does not contain exactly two items, throw a | 252 // 1. If |header| does not contain exactly two items, throw a |
| 252 // TypeError. | 253 // TypeError. |
| 253 // 2. Append |header|'s first item/|header|'s second item to | 254 // 2. Append |header|'s first item/|header|'s second item to |
| 254 // |headers|. Rethrow any exception." | 255 // |headers|. Rethrow any exception." |
| 255 for (size_t i = 0; i < keys.size(); ++i) { | 256 for (size_t i = 0; i < keys.size(); ++i) { |
| 256 // We've already got the keyValuePair for key[0]. | 257 // We've already got the keyValuePair for key[0]. |
| 257 if (i > 0) { | 258 if (i > 0) { |
| 258 if (!object.get(keys[i], keyValuePair)) { | 259 if (!DictionaryHelper::get(object, keys[i], keyValuePair)) { |
| 259 exceptionState.throwTypeError("Invalid value"); | 260 exceptionState.throwTypeError("Invalid value"); |
| 260 return; | 261 return; |
| 261 } | 262 } |
| 262 } | 263 } |
| 263 if (keyValuePair.size() != 2) { | 264 if (keyValuePair.size() != 2) { |
| 264 exceptionState.throwTypeError("Invalid value"); | 265 exceptionState.throwTypeError("Invalid value"); |
| 265 return; | 266 return; |
| 266 } | 267 } |
| 267 append(keyValuePair[0], keyValuePair[1], exceptionState); | 268 append(keyValuePair[0], keyValuePair[1], exceptionState); |
| 268 if (exceptionState.hadException()) | 269 if (exceptionState.hadException()) |
| 269 return; | 270 return; |
| 270 keyValuePair.clear(); | 271 keyValuePair.clear(); |
| 271 } | 272 } |
| 272 return; | 273 return; |
| 273 } | 274 } |
| 274 // "3. Otherwise, if |object| is an open-ended dictionary, then for each | 275 // "3. Otherwise, if |object| is an open-ended dictionary, then for each |
| 275 // |header| in object, run these substeps: | 276 // |header| in object, run these substeps: |
| 276 // 1. Set |header|'s key to |header|'s key, converted to ByteString. | 277 // 1. Set |header|'s key to |header|'s key, converted to ByteString. |
| 277 // Rethrow any exception. | 278 // Rethrow any exception. |
| 278 // 2. Append |header|'s key/|header|'s value to |headers|. Rethrow any | 279 // 2. Append |header|'s key/|header|'s value to |headers|. Rethrow any |
| 279 // exception." | 280 // exception." |
| 280 // FIXME: Support OpenEndedDictionary<ByteString>. | 281 // FIXME: Support OpenEndedDictionary<ByteString>. |
| 281 for (size_t i = 0; i < keys.size(); ++i) { | 282 for (size_t i = 0; i < keys.size(); ++i) { |
| 282 String value; | 283 String value; |
| 283 if (!object.get(keys[i], value)) { | 284 if (!DictionaryHelper::get(object, keys[i], value)) { |
| 284 exceptionState.throwTypeError("Invalid value"); | 285 exceptionState.throwTypeError("Invalid value"); |
| 285 return; | 286 return; |
| 286 } | 287 } |
| 287 append(keys[i], value, exceptionState); | 288 append(keys[i], value, exceptionState); |
| 288 if (exceptionState.hadException()) | 289 if (exceptionState.hadException()) |
| 289 return; | 290 return; |
| 290 } | 291 } |
| 291 } | 292 } |
| 292 | 293 |
| 293 Headers::Headers() | 294 Headers::Headers() |
| (...skipping 18 matching lines...) Expand all Loading... |
| 312 if (thisArg) | 313 if (thisArg) |
| 313 callback->handleItem(*thisArg, m_headerList->list()[i]->second, m_he
aderList->list()[i]->first, this); | 314 callback->handleItem(*thisArg, m_headerList->list()[i]->second, m_he
aderList->list()[i]->first, this); |
| 314 else | 315 else |
| 315 callback->handleItem(m_headerList->list()[i]->second, m_headerList->
list()[i]->first, this); | 316 callback->handleItem(m_headerList->list()[i]->second, m_headerList->
list()[i]->first, this); |
| 316 if (exceptionState.hadException()) | 317 if (exceptionState.hadException()) |
| 317 break; | 318 break; |
| 318 } | 319 } |
| 319 } | 320 } |
| 320 | 321 |
| 321 } // namespace WebCore | 322 } // namespace WebCore |
| OLD | NEW |