| 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 |