OLD | NEW |
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/miscellaneous_bindings.h" | 5 #include "chrome/renderer/extensions/miscellaneous_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" |
11 #include "base/lazy_instance.h" | 11 #include "base/lazy_instance.h" |
12 #include "chrome/common/extensions/extension_message_bundle.h" | 12 #include "chrome/common/extensions/extension_message_bundle.h" |
13 #include "chrome/common/extensions/extension_messages.h" | 13 #include "chrome/common/extensions/extension_messages.h" |
14 #include "chrome/common/url_constants.h" | 14 #include "chrome/common/url_constants.h" |
15 #include "chrome/renderer/extensions/chrome_v8_context.h" | 15 #include "chrome/renderer/extensions/chrome_v8_context.h" |
16 #include "chrome/renderer/extensions/chrome_v8_context_set.h" | 16 #include "chrome/renderer/extensions/chrome_v8_context_set.h" |
17 #include "chrome/renderer/extensions/chrome_v8_extension.h" | 17 #include "chrome/renderer/extensions/chrome_v8_extension.h" |
18 #include "chrome/renderer/extensions/event_bindings.h" | 18 #include "chrome/renderer/extensions/event_bindings.h" |
19 #include "chrome/renderer/extensions/extension_dispatcher.h" | 19 #include "chrome/renderer/extensions/extension_dispatcher.h" |
20 #include "content/public/renderer/render_thread.h" | 20 #include "content/public/renderer/render_thread.h" |
21 #include "content/public/renderer/render_view.h" | 21 #include "content/public/renderer/render_view.h" |
22 #include "grit/renderer_resources.h" | 22 #include "grit/renderer_resources.h" |
| 23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebScopedMicrotaskSup
pression.h" |
23 #include "v8/include/v8.h" | 24 #include "v8/include/v8.h" |
24 | 25 |
25 // Message passing API example (in a content script): | 26 // Message passing API example (in a content script): |
26 // var extension = | 27 // var extension = |
27 // new chrome.Extension('00123456789abcdef0123456789abcdef0123456'); | 28 // new chrome.Extension('00123456789abcdef0123456789abcdef0123456'); |
28 // var port = extension.connect(); | 29 // var port = extension.connect(); |
29 // port.postMessage('Can you hear me now?'); | 30 // port.postMessage('Can you hear me now?'); |
30 // port.onmessage.addListener(function(msg, port) { | 31 // port.onmessage.addListener(function(msg, port) { |
31 // alert('response=' + msg); | 32 // alert('response=' + msg); |
32 // port.postMessage('I got your reponse'); | 33 // port.postMessage('I got your reponse'); |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 } | 139 } |
139 | 140 |
140 struct GCCallbackArgs { | 141 struct GCCallbackArgs { |
141 v8::Persistent<v8::Object> object; | 142 v8::Persistent<v8::Object> object; |
142 v8::Persistent<v8::Function> callback; | 143 v8::Persistent<v8::Function> callback; |
143 }; | 144 }; |
144 | 145 |
145 static void GCCallback(v8::Persistent<v8::Value> object, void* parameter) { | 146 static void GCCallback(v8::Persistent<v8::Value> object, void* parameter) { |
146 v8::HandleScope handle_scope; | 147 v8::HandleScope handle_scope; |
147 GCCallbackArgs* args = reinterpret_cast<GCCallbackArgs*>(parameter); | 148 GCCallbackArgs* args = reinterpret_cast<GCCallbackArgs*>(parameter); |
| 149 WebKit::WebScopedMicrotaskSuppression suppression; |
148 args->callback->Call(args->callback->CreationContext()->Global(), 0, NULL); | 150 args->callback->Call(args->callback->CreationContext()->Global(), 0, NULL); |
149 args->callback.Dispose(); | 151 args->callback.Dispose(); |
150 args->object.Dispose(); | 152 args->object.Dispose(); |
151 delete args; | 153 delete args; |
152 } | 154 } |
153 | 155 |
154 // Binds a callback to be invoked when the given object is garbage collected. | 156 // Binds a callback to be invoked when the given object is garbage collected. |
155 static v8::Handle<v8::Value> BindToGC(const v8::Arguments& args) { | 157 static v8::Handle<v8::Value> BindToGC(const v8::Arguments& args) { |
156 if (args.Length() == 2 && args[0]->IsObject() && args[1]->IsFunction()) { | 158 if (args.Length() == 2 && args[0]->IsObject() && args[1]->IsFunction()) { |
157 GCCallbackArgs* context = new GCCallbackArgs; | 159 GCCallbackArgs* context = new GCCallbackArgs; |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 std::vector<v8::Handle<v8::Value> > arguments; | 283 std::vector<v8::Handle<v8::Value> > arguments; |
282 arguments.push_back(v8::Integer::New(port_id)); | 284 arguments.push_back(v8::Integer::New(port_id)); |
283 arguments.push_back(v8::Boolean::New(connection_error)); | 285 arguments.push_back(v8::Boolean::New(connection_error)); |
284 (*it)->CallChromeHiddenMethod("Port.dispatchOnDisconnect", | 286 (*it)->CallChromeHiddenMethod("Port.dispatchOnDisconnect", |
285 arguments.size(), &arguments[0], | 287 arguments.size(), &arguments[0], |
286 NULL); | 288 NULL); |
287 } | 289 } |
288 } | 290 } |
289 | 291 |
290 } // namespace extension | 292 } // namespace extension |
OLD | NEW |