| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * 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 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 bool unused; | 163 bool unused; |
| 164 return get(key, value, unused); | 164 return get(key, value, unused); |
| 165 } | 165 } |
| 166 | 166 |
| 167 bool Dictionary::get(const String& key, String& value) const | 167 bool Dictionary::get(const String& key, String& value) const |
| 168 { | 168 { |
| 169 v8::Local<v8::Value> v8Value; | 169 v8::Local<v8::Value> v8Value; |
| 170 if (!getKey(key, v8Value)) | 170 if (!getKey(key, v8Value)) |
| 171 return false; | 171 return false; |
| 172 | 172 |
| 173 // FIXME: It is possible for this to throw in which case we'd be getting bac
k | 173 V8TRYCATCH_FOR_V8STRINGRESOURCE_RETURN(V8StringResource<>, stringValue, v8Va
lue, false); |
| 174 // an empty string and returning true when we should be returning fal
se. | 174 value = stringValue; |
| 175 // See fast/dom/Geolocation/script-tests/argument-types.js for a simi
lar | |
| 176 // example. | |
| 177 value = toWebCoreString(v8Value); | |
| 178 return true; | 175 return true; |
| 179 } | 176 } |
| 180 | 177 |
| 181 bool Dictionary::get(const String& key, ScriptValue& value) const | 178 bool Dictionary::get(const String& key, ScriptValue& value) const |
| 182 { | 179 { |
| 183 v8::Local<v8::Value> v8Value; | 180 v8::Local<v8::Value> v8Value; |
| 184 if (!getKey(key, v8Value)) | 181 if (!getKey(key, v8Value)) |
| 185 return false; | 182 return false; |
| 186 | 183 |
| 187 value = ScriptValue(v8Value); | 184 value = ScriptValue(v8Value); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 | 300 |
| 304 // FIXME: Support array-like objects | 301 // FIXME: Support array-like objects |
| 305 if (!v8Value->IsArray()) | 302 if (!v8Value->IsArray()) |
| 306 return false; | 303 return false; |
| 307 | 304 |
| 308 ASSERT(m_isolate); | 305 ASSERT(m_isolate); |
| 309 ASSERT(m_isolate == v8::Isolate::GetCurrent()); | 306 ASSERT(m_isolate == v8::Isolate::GetCurrent()); |
| 310 v8::Local<v8::Array> v8Array = v8::Local<v8::Array>::Cast(v8Value); | 307 v8::Local<v8::Array> v8Array = v8::Local<v8::Array>::Cast(v8Value); |
| 311 for (size_t i = 0; i < v8Array->Length(); ++i) { | 308 for (size_t i = 0; i < v8Array->Length(); ++i) { |
| 312 v8::Local<v8::Value> indexedValue = v8Array->Get(v8::Integer::New(i, m_i
solate)); | 309 v8::Local<v8::Value> indexedValue = v8Array->Get(v8::Integer::New(i, m_i
solate)); |
| 313 value.add(toWebCoreString(indexedValue)); | 310 V8TRYCATCH_FOR_V8STRINGRESOURCE_RETURN(V8StringResource<>, stringValue,
indexedValue, false); |
| 311 value.add(stringValue); |
| 314 } | 312 } |
| 315 | 313 |
| 316 return true; | 314 return true; |
| 317 } | 315 } |
| 318 | 316 |
| 319 bool Dictionary::getWithUndefinedOrNullCheck(const String& key, String& value) c
onst | 317 bool Dictionary::getWithUndefinedOrNullCheck(const String& key, String& value) c
onst |
| 320 { | 318 { |
| 321 v8::Local<v8::Value> v8Value; | 319 v8::Local<v8::Value> v8Value; |
| 322 if (!getKey(key, v8Value) || v8Value->IsNull() || v8Value->IsUndefined()) | 320 if (!getKey(key, v8Value) || v8Value->IsNull() || v8Value->IsUndefined()) |
| 323 return false; | 321 return false; |
| 324 | 322 |
| 325 // FIXME: It is possible for this to throw in which case we'd be getting bac
k | 323 if (WebCore::isUndefinedOrNull(v8Value)) { |
| 326 // an empty string and returning true when we should be returning fal
se. | 324 value = String(); |
| 327 // See fast/dom/Geolocation/script-tests/argument-types.js for a simi
lar | 325 return true; |
| 328 // example. | 326 } |
| 329 value = WebCore::isUndefinedOrNull(v8Value) ? String() : toWebCoreString(v8V
alue); | 327 |
| 328 V8TRYCATCH_FOR_V8STRINGRESOURCE_RETURN(V8StringResource<>, stringValue, v8Va
lue, false); |
| 329 value = stringValue; |
| 330 return true; | 330 return true; |
| 331 } | 331 } |
| 332 | 332 |
| 333 bool Dictionary::get(const String& key, RefPtr<Uint8Array>& value) const | 333 bool Dictionary::get(const String& key, RefPtr<Uint8Array>& value) const |
| 334 { | 334 { |
| 335 v8::Local<v8::Value> v8Value; | 335 v8::Local<v8::Value> v8Value; |
| 336 if (!getKey(key, v8Value)) | 336 if (!getKey(key, v8Value)) |
| 337 return false; | 337 return false; |
| 338 | 338 |
| 339 value = 0; | 339 value = 0; |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 v8::Local<v8::Value> v8Value; | 491 v8::Local<v8::Value> v8Value; |
| 492 if (!getKey(key, v8Value)) | 492 if (!getKey(key, v8Value)) |
| 493 return false; | 493 return false; |
| 494 | 494 |
| 495 if (!v8Value->IsArray()) | 495 if (!v8Value->IsArray()) |
| 496 return false; | 496 return false; |
| 497 | 497 |
| 498 v8::Local<v8::Array> v8Array = v8::Local<v8::Array>::Cast(v8Value); | 498 v8::Local<v8::Array> v8Array = v8::Local<v8::Array>::Cast(v8Value); |
| 499 for (size_t i = 0; i < v8Array->Length(); ++i) { | 499 for (size_t i = 0; i < v8Array->Length(); ++i) { |
| 500 v8::Local<v8::Value> indexedValue = v8Array->Get(v8::Uint32::New(i)); | 500 v8::Local<v8::Value> indexedValue = v8Array->Get(v8::Uint32::New(i)); |
| 501 value.append(toWebCoreString(indexedValue)); | 501 V8TRYCATCH_FOR_V8STRINGRESOURCE_RETURN(V8StringResource<>, stringValue,
indexedValue, false); |
| 502 value.append(stringValue); |
| 502 } | 503 } |
| 503 | 504 |
| 504 return true; | 505 return true; |
| 505 } | 506 } |
| 506 | 507 |
| 507 bool Dictionary::get(const String& key, ArrayValue& value) const | 508 bool Dictionary::get(const String& key, ArrayValue& value) const |
| 508 { | 509 { |
| 509 v8::Local<v8::Value> v8Value; | 510 v8::Local<v8::Value> v8Value; |
| 510 if (!getKey(key, v8Value)) | 511 if (!getKey(key, v8Value)) |
| 511 return false; | 512 return false; |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 577 | 578 |
| 578 v8::Local<v8::Array> properties = options->GetOwnPropertyNames(); | 579 v8::Local<v8::Array> properties = options->GetOwnPropertyNames(); |
| 579 if (properties.IsEmpty()) | 580 if (properties.IsEmpty()) |
| 580 return true; | 581 return true; |
| 581 for (uint32_t i = 0; i < properties->Length(); ++i) { | 582 for (uint32_t i = 0; i < properties->Length(); ++i) { |
| 582 v8::Local<v8::String> key = properties->Get(i)->ToString(); | 583 v8::Local<v8::String> key = properties->Get(i)->ToString(); |
| 583 if (!options->Has(key)) | 584 if (!options->Has(key)) |
| 584 continue; | 585 continue; |
| 585 | 586 |
| 586 v8::Local<v8::Value> value = options->Get(key); | 587 v8::Local<v8::Value> value = options->Get(key); |
| 587 String stringKey = toWebCoreString(key); | 588 V8TRYCATCH_FOR_V8STRINGRESOURCE_RETURN(V8StringResource<>, stringKey, ke
y, false); |
| 588 String stringValue = toWebCoreString(value); | 589 V8TRYCATCH_FOR_V8STRINGRESOURCE_RETURN(V8StringResource<>, stringValue,
value, false); |
| 589 if (!stringKey.isEmpty()) | 590 if (!static_cast<const String&>(stringKey).isEmpty()) |
| 590 hashMap.set(stringKey, stringValue); | 591 hashMap.set(stringKey, stringValue); |
| 591 } | 592 } |
| 592 | 593 |
| 593 return true; | 594 return true; |
| 594 } | 595 } |
| 595 | 596 |
| 596 bool Dictionary::getOwnPropertyNames(Vector<String>& names) const | 597 bool Dictionary::getOwnPropertyNames(Vector<String>& names) const |
| 597 { | 598 { |
| 598 if (!isObject()) | 599 if (!isObject()) |
| 599 return false; | 600 return false; |
| 600 | 601 |
| 601 v8::Handle<v8::Object> options = m_options->ToObject(); | 602 v8::Handle<v8::Object> options = m_options->ToObject(); |
| 602 if (options.IsEmpty()) | 603 if (options.IsEmpty()) |
| 603 return false; | 604 return false; |
| 604 | 605 |
| 605 v8::Local<v8::Array> properties = options->GetOwnPropertyNames(); | 606 v8::Local<v8::Array> properties = options->GetOwnPropertyNames(); |
| 606 if (properties.IsEmpty()) | 607 if (properties.IsEmpty()) |
| 607 return true; | 608 return true; |
| 608 for (uint32_t i = 0; i < properties->Length(); ++i) { | 609 for (uint32_t i = 0; i < properties->Length(); ++i) { |
| 609 v8::Local<v8::String> key = properties->Get(i)->ToString(); | 610 v8::Local<v8::String> key = properties->Get(i)->ToString(); |
| 610 if (!options->Has(key)) | 611 if (!options->Has(key)) |
| 611 continue; | 612 continue; |
| 612 names.append(toWebCoreString(key)); | 613 V8TRYCATCH_FOR_V8STRINGRESOURCE_RETURN(V8StringResource<>, stringKey, ke
y, false); |
| 614 names.append(stringKey); |
| 613 } | 615 } |
| 614 | 616 |
| 615 return true; | 617 return true; |
| 616 } | 618 } |
| 617 | 619 |
| 618 } // namespace WebCore | 620 } // namespace WebCore |
| OLD | NEW |