| Index: chrome/renderer/extensions/messaging_bindings.cc
 | 
| diff --git a/chrome/renderer/extensions/messaging_bindings.cc b/chrome/renderer/extensions/messaging_bindings.cc
 | 
| index b3cd0a3f5bc6488c6534b0e503e2b369e55fd67b..48f964d957bef60309ffba6e0de3dcb3e4bdd264 100644
 | 
| --- a/chrome/renderer/extensions/messaging_bindings.cc
 | 
| +++ b/chrome/renderer/extensions/messaging_bindings.cc
 | 
| @@ -109,7 +109,7 @@ class ExtensionImpl : public extensions::ChromeV8Extension {
 | 
|  
 | 
|      int port_id = args[0]->Int32Value();
 | 
|      if (!HasPortData(port_id)) {
 | 
| -      v8::ThrowException(v8::Exception::Error(
 | 
| +      args.GetIsolate()->ThrowException(v8::Exception::Error(
 | 
|            v8::String::NewFromUtf8(args.GetIsolate(), kPortClosedError)));
 | 
|        return;
 | 
|      }
 | 
| @@ -117,7 +117,7 @@ class ExtensionImpl : public extensions::ChromeV8Extension {
 | 
|      renderview->Send(new ExtensionHostMsg_PostMessage(
 | 
|          renderview->GetRoutingID(), port_id,
 | 
|          extensions::Message(
 | 
| -            *v8::String::AsciiValue(args[1]),
 | 
| +            *v8::String::Utf8Value(args[1]),
 | 
|              blink::WebUserGestureIndicator::isProcessingUserGesture())));
 | 
|    }
 | 
|  
 | 
| @@ -178,18 +178,19 @@ class ExtensionImpl : public extensions::ChromeV8Extension {
 | 
|                       v8::Handle<v8::Function> callback,
 | 
|                       v8::Isolate* isolate) {
 | 
|        GCCallback* cb = new GCCallback(object, callback, isolate);
 | 
| -      cb->object_.MakeWeak(cb, NearDeathCallback);
 | 
| +      cb->object_.SetWeak(cb, NearDeathCallback);
 | 
|      }
 | 
|  
 | 
|     private:
 | 
| -    static void NearDeathCallback(v8::Isolate* isolate,
 | 
| -                                  v8::Persistent<v8::Object>* object,
 | 
| -                                  GCCallback* self) {
 | 
| +    static void NearDeathCallback(
 | 
| +        const v8::WeakCallbackData<v8::Object, GCCallback>& data) {
 | 
|        // v8 says we need to explicitly reset weak handles from their callbacks.
 | 
|        // It's not implicit as one might expect.
 | 
| -      self->object_.reset();
 | 
| -      base::MessageLoop::current()->PostTask(FROM_HERE,
 | 
| -          base::Bind(&GCCallback::RunCallback, base::Owned(self)));
 | 
| +      data.GetParameter()->object_.reset();
 | 
| +      base::MessageLoop::current()->PostTask(
 | 
| +          FROM_HERE,
 | 
| +          base::Bind(&GCCallback::RunCallback,
 | 
| +                     base::Owned(data.GetParameter())));
 | 
|      }
 | 
|  
 | 
|      GCCallback(v8::Handle<v8::Object> object,
 | 
| @@ -269,11 +270,11 @@ void MessagingBindings::DispatchOnConnect(
 | 
|      if ((*it)->v8_context().IsEmpty())
 | 
|        continue;
 | 
|  
 | 
| -    v8::Handle<v8::Value> tab = v8::Null();
 | 
| +    v8::Handle<v8::Value> tab = v8::Null(isolate);
 | 
|      if (!source_tab.empty())
 | 
|        tab = converter->ToV8Value(&source_tab, (*it)->v8_context());
 | 
|  
 | 
| -    v8::Handle<v8::Value> tls_channel_id_value = v8::Undefined();
 | 
| +    v8::Handle<v8::Value> tls_channel_id_value = v8::Undefined(isolate);
 | 
|      if ((*it)->extension()) {
 | 
|        ExternallyConnectableInfo* externally_connectable =
 | 
|            ExternallyConnectableInfo::Get((*it)->extension());
 | 
| @@ -407,7 +408,7 @@ void MessagingBindings::DispatchOnDisconnect(
 | 
|        arguments.push_back(
 | 
|            v8::String::NewFromUtf8(isolate, error_message.c_str()));
 | 
|      } else {
 | 
| -      arguments.push_back(v8::Null());
 | 
| +      arguments.push_back(v8::Null(isolate));
 | 
|      }
 | 
|      (*it)->module_system()->CallModuleMethod("messaging",
 | 
|                                               "dispatchOnDisconnect",
 | 
| 
 |