Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(207)

Side by Side Diff: chrome/renderer/extensions/messaging_bindings.cc

Issue 98543004: Remove usage of deprecated V8 APIs from c/r/extensions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: updates Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/renderer/extensions/messaging_bindings.h" 5 #include "chrome/renderer/extensions/messaging_bindings.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 if (!renderview) 102 if (!renderview)
103 return; 103 return;
104 104
105 // Arguments are (int32 port_id, string message). 105 // Arguments are (int32 port_id, string message).
106 CHECK(args.Length() == 2 && 106 CHECK(args.Length() == 2 &&
107 args[0]->IsInt32() && 107 args[0]->IsInt32() &&
108 args[1]->IsString()); 108 args[1]->IsString());
109 109
110 int port_id = args[0]->Int32Value(); 110 int port_id = args[0]->Int32Value();
111 if (!HasPortData(port_id)) { 111 if (!HasPortData(port_id)) {
112 v8::ThrowException(v8::Exception::Error( 112 args.GetIsolate()->ThrowException(v8::Exception::Error(
113 v8::String::NewFromUtf8(args.GetIsolate(), kPortClosedError))); 113 v8::String::NewFromUtf8(args.GetIsolate(), kPortClosedError)));
114 return; 114 return;
115 } 115 }
116 116
117 renderview->Send(new ExtensionHostMsg_PostMessage( 117 renderview->Send(new ExtensionHostMsg_PostMessage(
118 renderview->GetRoutingID(), port_id, 118 renderview->GetRoutingID(), port_id,
119 extensions::Message( 119 extensions::Message(
120 *v8::String::AsciiValue(args[1]), 120 *v8::String::Utf8Value(args[1]),
121 blink::WebUserGestureIndicator::isProcessingUserGesture()))); 121 blink::WebUserGestureIndicator::isProcessingUserGesture())));
122 } 122 }
123 123
124 // Forcefully disconnects a port. 124 // Forcefully disconnects a port.
125 void CloseChannel(const v8::FunctionCallbackInfo<v8::Value>& args) { 125 void CloseChannel(const v8::FunctionCallbackInfo<v8::Value>& args) {
126 // Arguments are (int32 port_id, boolean notify_browser). 126 // Arguments are (int32 port_id, boolean notify_browser).
127 CHECK_EQ(2, args.Length()); 127 CHECK_EQ(2, args.Length());
128 CHECK(args[0]->IsInt32()); 128 CHECK(args[0]->IsInt32());
129 CHECK(args[1]->IsBoolean()); 129 CHECK(args[1]->IsBoolean());
130 130
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 } 171 }
172 172
173 // Holds a |callback| to run sometime after |object| is GC'ed. |callback| will 173 // Holds a |callback| to run sometime after |object| is GC'ed. |callback| will
174 // not be executed re-entrantly to avoid running JS in an unexpected state. 174 // not be executed re-entrantly to avoid running JS in an unexpected state.
175 class GCCallback { 175 class GCCallback {
176 public: 176 public:
177 static void Bind(v8::Handle<v8::Object> object, 177 static void Bind(v8::Handle<v8::Object> object,
178 v8::Handle<v8::Function> callback, 178 v8::Handle<v8::Function> callback,
179 v8::Isolate* isolate) { 179 v8::Isolate* isolate) {
180 GCCallback* cb = new GCCallback(object, callback, isolate); 180 GCCallback* cb = new GCCallback(object, callback, isolate);
181 cb->object_.MakeWeak(cb, NearDeathCallback); 181 cb->object_.SetWeak(cb, NearDeathCallback);
182 } 182 }
183 183
184 private: 184 private:
185 static void NearDeathCallback(v8::Isolate* isolate, 185 static void NearDeathCallback(
186 v8::Persistent<v8::Object>* object, 186 const v8::WeakCallbackData<v8::Object, GCCallback>& data) {
187 GCCallback* self) {
188 // v8 says we need to explicitly reset weak handles from their callbacks. 187 // v8 says we need to explicitly reset weak handles from their callbacks.
189 // It's not implicit as one might expect. 188 // It's not implicit as one might expect.
190 self->object_.reset(); 189 data.GetParameter()->object_.reset();
191 base::MessageLoop::current()->PostTask(FROM_HERE, 190 base::MessageLoop::current()->PostTask(
192 base::Bind(&GCCallback::RunCallback, base::Owned(self))); 191 FROM_HERE,
192 base::Bind(&GCCallback::RunCallback,
193 base::Owned(data.GetParameter())));
193 } 194 }
194 195
195 GCCallback(v8::Handle<v8::Object> object, 196 GCCallback(v8::Handle<v8::Object> object,
196 v8::Handle<v8::Function> callback, 197 v8::Handle<v8::Function> callback,
197 v8::Isolate* isolate) 198 v8::Isolate* isolate)
198 : object_(object), callback_(callback), isolate_(isolate) {} 199 : object_(object), callback_(callback), isolate_(isolate) {}
199 200
200 void RunCallback() { 201 void RunCallback() {
201 v8::HandleScope handle_scope(isolate_); 202 v8::HandleScope handle_scope(isolate_);
202 v8::Handle<v8::Function> callback = callback_.NewHandle(isolate_); 203 v8::Handle<v8::Function> callback = callback_.NewHandle(isolate_);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 it != contexts.end(); ++it) { 263 it != contexts.end(); ++it) {
263 if (restrict_to_render_view && 264 if (restrict_to_render_view &&
264 restrict_to_render_view != (*it)->GetRenderView()) { 265 restrict_to_render_view != (*it)->GetRenderView()) {
265 continue; 266 continue;
266 } 267 }
267 268
268 // TODO(kalman): remove when ContextSet::ForEach is available. 269 // TODO(kalman): remove when ContextSet::ForEach is available.
269 if ((*it)->v8_context().IsEmpty()) 270 if ((*it)->v8_context().IsEmpty())
270 continue; 271 continue;
271 272
272 v8::Handle<v8::Value> tab = v8::Null(); 273 v8::Handle<v8::Value> tab = v8::Null(isolate);
273 if (!source_tab.empty()) 274 if (!source_tab.empty())
274 tab = converter->ToV8Value(&source_tab, (*it)->v8_context()); 275 tab = converter->ToV8Value(&source_tab, (*it)->v8_context());
275 276
276 v8::Handle<v8::Value> tls_channel_id_value = v8::Undefined(); 277 v8::Handle<v8::Value> tls_channel_id_value = v8::Undefined(isolate);
277 if ((*it)->extension()) { 278 if ((*it)->extension()) {
278 ExternallyConnectableInfo* externally_connectable = 279 ExternallyConnectableInfo* externally_connectable =
279 ExternallyConnectableInfo::Get((*it)->extension()); 280 ExternallyConnectableInfo::Get((*it)->extension());
280 if (externally_connectable && 281 if (externally_connectable &&
281 externally_connectable->accepts_tls_channel_id) { 282 externally_connectable->accepts_tls_channel_id) {
282 tls_channel_id_value = 283 tls_channel_id_value =
283 v8::String::NewFromUtf8(isolate, 284 v8::String::NewFromUtf8(isolate,
284 tls_channel_id.c_str(), 285 tls_channel_id.c_str(),
285 v8::String::kNormalString, 286 v8::String::kNormalString,
286 tls_channel_id.size()); 287 tls_channel_id.size());
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 // TODO(kalman): remove when ContextSet::ForEach is available. 401 // TODO(kalman): remove when ContextSet::ForEach is available.
401 if ((*it)->v8_context().IsEmpty()) 402 if ((*it)->v8_context().IsEmpty())
402 continue; 403 continue;
403 404
404 std::vector<v8::Handle<v8::Value> > arguments; 405 std::vector<v8::Handle<v8::Value> > arguments;
405 arguments.push_back(v8::Integer::New(port_id)); 406 arguments.push_back(v8::Integer::New(port_id));
406 if (!error_message.empty()) { 407 if (!error_message.empty()) {
407 arguments.push_back( 408 arguments.push_back(
408 v8::String::NewFromUtf8(isolate, error_message.c_str())); 409 v8::String::NewFromUtf8(isolate, error_message.c_str()));
409 } else { 410 } else {
410 arguments.push_back(v8::Null()); 411 arguments.push_back(v8::Null(isolate));
411 } 412 }
412 (*it)->module_system()->CallModuleMethod("messaging", 413 (*it)->module_system()->CallModuleMethod("messaging",
413 "dispatchOnDisconnect", 414 "dispatchOnDisconnect",
414 &arguments); 415 &arguments);
415 } 416 }
416 } 417 }
417 418
418 } // namespace extensions 419 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/renderer/extensions/logging_native_handler.cc ('k') | chrome/renderer/extensions/module_system.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698