| Index: src/extensions/experimental/i18n-utils.cc
 | 
| ===================================================================
 | 
| --- src/extensions/experimental/i18n-utils.cc	(revision 8174)
 | 
| +++ src/extensions/experimental/i18n-utils.cc	(working copy)
 | 
| @@ -29,6 +29,8 @@
 | 
|  
 | 
|  #include <string.h>
 | 
|  
 | 
| +#include "unicode/unistr.h"
 | 
| +
 | 
|  namespace v8 {
 | 
|  namespace internal {
 | 
|  
 | 
| @@ -40,4 +42,27 @@
 | 
|    dest[length - 1] = '\0';
 | 
|  }
 | 
|  
 | 
| +// static
 | 
| +bool I18NUtils::ExtractStringSetting(const v8::Handle<v8::Object>& settings,
 | 
| +                                     const char* setting,
 | 
| +                                     icu::UnicodeString* result) {
 | 
| +  if (!setting || !result) return false;
 | 
| +
 | 
| +  v8::HandleScope handle_scope;
 | 
| +  v8::TryCatch try_catch;
 | 
| +  v8::Handle<v8::Value> value = settings->Get(v8::String::New(setting));
 | 
| +  if (try_catch.HasCaught()) {
 | 
| +    return false;
 | 
| +  }
 | 
| +  // No need to check if |value| is empty because it's taken care of
 | 
| +  // by TryCatch above.
 | 
| +  if (!value->IsUndefined() && !value->IsNull() && value->IsString()) {
 | 
| +    v8::String::Utf8Value utf8_value(value);
 | 
| +    if (*utf8_value == NULL) return false;
 | 
| +    result->setTo(icu::UnicodeString::fromUTF8(*utf8_value));
 | 
| +    return true;
 | 
| +  }
 | 
| +  return false;
 | 
| +}
 | 
| +
 | 
|  } }  // namespace v8::internal
 | 
| 
 |