| 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/ExceptionState.h" | 9 #include "bindings/core/v8/ExceptionState.h" |
| 10 #include "core/fetch/FetchUtils.h" | 10 #include "core/fetch/FetchUtils.h" |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 object.getOwnPropertyNames(keys); | 241 object.getOwnPropertyNames(keys); |
| 242 if (keys.size() == 0) | 242 if (keys.size() == 0) |
| 243 return; | 243 return; |
| 244 | 244 |
| 245 // Because of the restrictions in IDL compiler of blink we recieve | 245 // Because of the restrictions in IDL compiler of blink we recieve |
| 246 // sequence<sequence<ByteString>> as a Dictionary, which is a type of union | 246 // sequence<sequence<ByteString>> as a Dictionary, which is a type of union |
| 247 // type of HeadersInit defined in the spec. | 247 // type of HeadersInit defined in the spec. |
| 248 // http://fetch.spec.whatwg.org/#headers-class | 248 // http://fetch.spec.whatwg.org/#headers-class |
| 249 // FIXME: Support sequence<sequence<ByteString>>. | 249 // FIXME: Support sequence<sequence<ByteString>>. |
| 250 Vector<String> keyValuePair; | 250 Vector<String> keyValuePair; |
| 251 if (DictionaryHelper::get(object, keys[0], keyValuePair)) { | 251 if (object.get(keys[0], keyValuePair)) { |
| 252 // "2. Otherwise, if |object| is a sequence, then for each |header| in | 252 // "2. Otherwise, if |object| is a sequence, then for each |header| in |
| 253 // |object|, run these substeps: | 253 // |object|, run these substeps: |
| 254 // 1. If |header| does not contain exactly two items, throw a | 254 // 1. If |header| does not contain exactly two items, throw a |
| 255 // TypeError. | 255 // TypeError. |
| 256 // 2. Append |header|'s first item/|header|'s second item to | 256 // 2. Append |header|'s first item/|header|'s second item to |
| 257 // |headers|. Rethrow any exception." | 257 // |headers|. Rethrow any exception." |
| 258 for (size_t i = 0; i < keys.size(); ++i) { | 258 for (size_t i = 0; i < keys.size(); ++i) { |
| 259 // We've already got the keyValuePair for key[0]. | 259 // We've already got the keyValuePair for key[0]. |
| 260 if (i > 0) { | 260 if (i > 0) { |
| 261 if (!DictionaryHelper::get(object, keys[i], keyValuePair)) { | 261 if (!object.get(keys[i], keyValuePair)) { |
| 262 exceptionState.throwTypeError("Invalid value"); | 262 exceptionState.throwTypeError("Invalid value"); |
| 263 return; | 263 return; |
| 264 } | 264 } |
| 265 } | 265 } |
| 266 if (keyValuePair.size() != 2) { | 266 if (keyValuePair.size() != 2) { |
| 267 exceptionState.throwTypeError("Invalid value"); | 267 exceptionState.throwTypeError("Invalid value"); |
| 268 return; | 268 return; |
| 269 } | 269 } |
| 270 append(keyValuePair[0], keyValuePair[1], exceptionState); | 270 append(keyValuePair[0], keyValuePair[1], exceptionState); |
| 271 if (exceptionState.hadException()) | 271 if (exceptionState.hadException()) |
| 272 return; | 272 return; |
| 273 keyValuePair.clear(); | 273 keyValuePair.clear(); |
| 274 } | 274 } |
| 275 return; | 275 return; |
| 276 } | 276 } |
| 277 // "3. Otherwise, if |object| is an open-ended dictionary, then for each | 277 // "3. Otherwise, if |object| is an open-ended dictionary, then for each |
| 278 // |header| in object, run these substeps: | 278 // |header| in object, run these substeps: |
| 279 // 1. Set |header|'s key to |header|'s key, converted to ByteString. | 279 // 1. Set |header|'s key to |header|'s key, converted to ByteString. |
| 280 // Rethrow any exception. | 280 // Rethrow any exception. |
| 281 // 2. Append |header|'s key/|header|'s value to |headers|. Rethrow any | 281 // 2. Append |header|'s key/|header|'s value to |headers|. Rethrow any |
| 282 // exception." | 282 // exception." |
| 283 // FIXME: Support OpenEndedDictionary<ByteString>. | 283 // FIXME: Support OpenEndedDictionary<ByteString>. |
| 284 for (size_t i = 0; i < keys.size(); ++i) { | 284 for (size_t i = 0; i < keys.size(); ++i) { |
| 285 String value; | 285 String value; |
| 286 if (!DictionaryHelper::get(object, keys[i], value)) { | 286 if (!object.get(keys[i], value)) { |
| 287 exceptionState.throwTypeError("Invalid value"); | 287 exceptionState.throwTypeError("Invalid value"); |
| 288 return; | 288 return; |
| 289 } | 289 } |
| 290 append(keys[i], value, exceptionState); | 290 append(keys[i], value, exceptionState); |
| 291 if (exceptionState.hadException()) | 291 if (exceptionState.hadException()) |
| 292 return; | 292 return; |
| 293 } | 293 } |
| 294 } | 294 } |
| 295 | 295 |
| 296 Headers::Headers() | 296 Headers::Headers() |
| (...skipping 20 matching lines...) Expand all Loading... |
| 317 break; | 317 break; |
| 318 } | 318 } |
| 319 } | 319 } |
| 320 | 320 |
| 321 void Headers::trace(Visitor* visitor) | 321 void Headers::trace(Visitor* visitor) |
| 322 { | 322 { |
| 323 visitor->trace(m_headerList); | 323 visitor->trace(m_headerList); |
| 324 } | 324 } |
| 325 | 325 |
| 326 } // namespace blink | 326 } // namespace blink |
| OLD | NEW |