| Index: Source/bindings/dart/DartHandleProxy.cpp
 | 
| diff --git a/Source/bindings/dart/DartHandleProxy.cpp b/Source/bindings/dart/DartHandleProxy.cpp
 | 
| index c255c5bac61e8b1d235e93774ab7185608346e55..7fc936408074d19d0e3968e97e52ca85bf619e23 100644
 | 
| --- a/Source/bindings/dart/DartHandleProxy.cpp
 | 
| +++ b/Source/bindings/dart/DartHandleProxy.cpp
 | 
| @@ -32,7 +32,6 @@
 | 
|  
 | 
|  #include "DartNode.h"
 | 
|  #include "bindings/dart/DartScriptValue.h"
 | 
| -#include "bindings/dart/DartUtilities.h"
 | 
|  #include "bindings/dart/V8Converter.h"
 | 
|  #include "bindings/v8/PageScriptDebugServer.h"
 | 
|  #include "bindings/v8/ScriptController.h"
 | 
| @@ -43,8 +42,6 @@
 | 
|  
 | 
|  #include "wtf/StdLibExtras.h"
 | 
|  
 | 
| -#include <dart_debugger_api.h>
 | 
| -
 | 
|  namespace WebCore {
 | 
|  
 | 
|  typedef HashMap<String, v8::Persistent<v8::FunctionTemplate>* > FunctionTemplateMap;
 | 
| @@ -61,38 +58,24 @@ DartScriptValue* readPointerFromProxy(v8::Handle<v8::Value> proxy)
 | 
|      return static_cast<DartScriptValue*>(pointer);
 | 
|  }
 | 
|  
 | 
| -/**
 | 
| - * Helper class to manage all scopes that must be entered to safely invoke Dart
 | 
| - * code.
 | 
| - */
 | 
| -class DartScopes {
 | 
| -private:
 | 
| -    DartScriptValue* scriptValue;
 | 
| -    DartIsolateScope scope;
 | 
| -    DartApiScope apiScope;
 | 
| -    Dart_ExceptionPauseInfo previousPauseInfo;
 | 
| -
 | 
| -public:
 | 
| -    Dart_Handle handle;
 | 
| -
 | 
| -    DartScopes(v8::Local<v8::Object> v8Handle) :
 | 
| -        scriptValue(readPointerFromProxy(v8Handle)),
 | 
| -        scope(scriptValue->isolate())
 | 
| -    {
 | 
| -        ASSERT(scriptValue->isIsolateAlive());
 | 
| -        handle = Dart_HandleFromPersistent(scriptValue->value());
 | 
| -        previousPauseInfo = Dart_GetExceptionPauseInfo();
 | 
| -        // FIXME: it is not clear this is the right long term solution but for
 | 
| -        // now we prevent pausing on exceptions when executing Dart code to
 | 
| -        // avoid crashing when handling an exception triggers an exception.
 | 
| -        Dart_SetExceptionPauseInfo(kNoPauseOnExceptions);
 | 
| -    }
 | 
| +DartScopes::DartScopes(v8::Local<v8::Object> v8Handle) :
 | 
| +    scriptValue(readPointerFromProxy(v8Handle)),
 | 
| +    scope(scriptValue->isolate())
 | 
| +{
 | 
| +    ASSERT(scriptValue->isIsolateAlive());
 | 
| +    handle = Dart_HandleFromPersistent(scriptValue->value());
 | 
| +    previousPauseInfo = Dart_GetExceptionPauseInfo();
 | 
| +    // FIXME: it is not clear this is the right long term solution but for
 | 
| +    // now we prevent pausing on exceptions when executing Dart code to
 | 
| +    // avoid crashing when handling an exception triggers an exception.
 | 
| +    Dart_SetExceptionPauseInfo(kNoPauseOnExceptions);
 | 
| +}
 | 
| +
 | 
| +DartScopes::~DartScopes()
 | 
| +{
 | 
| +    Dart_SetExceptionPauseInfo(previousPauseInfo);
 | 
| +}
 | 
|  
 | 
| -    ~DartScopes()
 | 
| -    {
 | 
| -        Dart_SetExceptionPauseInfo(previousPauseInfo);
 | 
| -    }
 | 
| -};
 | 
|  
 | 
|  static void weakCallback(v8::Isolate* isolate, v8::Persistent<v8::Object>* proxy, DartScriptValue* value)
 | 
|  {
 | 
| @@ -100,7 +83,7 @@ static void weakCallback(v8::Isolate* isolate, v8::Persistent<v8::Object>* proxy
 | 
|      proxy->Dispose(isolate);
 | 
|  }
 | 
|  
 | 
| -static Dart_Handle unwrapValue(v8::Handle<v8::Value> value)
 | 
| +Dart_Handle DartHandleProxy::unwrapValue(v8::Handle<v8::Value> value)
 | 
|  {
 | 
|      if (DartHandleProxy::isDartProxy(value))
 | 
|          return Dart_HandleFromPersistent(readPointerFromProxy(value)->value());
 | 
| @@ -347,7 +330,7 @@ static void functionInvocationCallback(const v8::FunctionCallbackInfo<v8::Value>
 | 
|  
 | 
|      Vector<Dart_Handle> dartFunctionArgs;
 | 
|      for (uint32_t i = 0; i < args.Length(); ++i)
 | 
| -        dartFunctionArgs.append(unwrapValue(args[i]));
 | 
| +        dartFunctionArgs.append(DartHandleProxy::unwrapValue(args[i]));
 | 
|  
 | 
|      if (Dart_IsClosure(handle)) {
 | 
|          setReturnValue(args, Dart_InvokeClosure(handle, dartFunctionArgs.size(), dartFunctionArgs.data()));
 | 
| @@ -392,7 +375,7 @@ static void typeProxyConstructorInvocationCallback(const v8::FunctionCallbackInf
 | 
|  
 | 
|      Vector<Dart_Handle> dartFunctionArgs;
 | 
|      for (uint32_t i = 0; i < args.Length(); ++i)
 | 
| -        dartFunctionArgs.append(unwrapValue(args[i]));
 | 
| +        dartFunctionArgs.append(DartHandleProxy::unwrapValue(args[i]));
 | 
|  
 | 
|      setReturnValue(args, Dart_New(handle, Dart_Null(), dartFunctionArgs.size(), dartFunctionArgs.data()));
 | 
|  }
 | 
| @@ -514,7 +497,7 @@ static void libraryNamedPropertySetter(v8::Local<v8::String> property, v8::Local
 | 
|  
 | 
|      Dart_Handle ret;
 | 
|      ASSERT(Dart_IsLibrary(handle));
 | 
| -    Dart_Handle dartValue = unwrapValue(value);
 | 
| +    Dart_Handle dartValue = DartHandleProxy::unwrapValue(value);
 | 
|      setReturnValue(info, Dart_SetField(handle, V8Converter::stringToDart(property), dartValue));
 | 
|  }
 | 
|  
 | 
| @@ -635,7 +618,7 @@ static void typeNamedPropertySetter(v8::Local<v8::String> property, v8::Local<v8
 | 
|      Dart_Handle handle = scopes.handle;
 | 
|  
 | 
|      ASSERT(Dart_IsType(handle));
 | 
| -    Dart_Handle dartValue = unwrapValue(value);
 | 
| +    Dart_Handle dartValue = DartHandleProxy::unwrapValue(value);
 | 
|      setReturnValue(info, Dart_Invoke(handle, V8Converter::stringToDart(v8::String::Concat(v8::String::New("set:"), property)), 1, &dartValue));
 | 
|  }
 | 
|  
 | 
| @@ -755,7 +738,7 @@ static void namedPropertySetter(v8::Local<v8::String> property, v8::Local<v8::Va
 | 
|      DartScopes scopes(info.Holder());
 | 
|      Dart_Handle handle = scopes.handle;
 | 
|  
 | 
| -    Dart_Handle dartValue = unwrapValue(value);
 | 
| +    Dart_Handle dartValue = DartHandleProxy::unwrapValue(value);
 | 
|      setReturnValue(info, Dart_Invoke(handle, V8Converter::stringToDart(v8::String::Concat(v8::String::New("set:"), property)), 1, &dartValue));
 | 
|  }
 | 
|  
 | 
| @@ -851,7 +834,7 @@ static void indexedSetter(uint32_t index, v8::Local<v8::Value> value, const v8::
 | 
|  
 | 
|      Dart_Handle ret = 0;
 | 
|      if (Dart_IsList(handle))
 | 
| -        ret = Dart_ListSetAt(handle, index, unwrapValue(value));
 | 
| +        ret = Dart_ListSetAt(handle, index, DartHandleProxy::unwrapValue(value));
 | 
|      else
 | 
|          ret = Dart_Null();
 | 
|  
 | 
| 
 |