| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/event_bindings.h" | 5 #include "chrome/renderer/extensions/event_bindings.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
| 9 #include "chrome/common/extensions/extension_messages.h" |
| 9 #include "chrome/common/extensions/extension_set.h" | 10 #include "chrome/common/extensions/extension_set.h" |
| 10 #include "chrome/common/render_messages.h" | |
| 11 #include "chrome/common/url_constants.h" | 11 #include "chrome/common/url_constants.h" |
| 12 #include "chrome/renderer/extensions/bindings_utils.h" | 12 #include "chrome/renderer/extensions/bindings_utils.h" |
| 13 #include "chrome/renderer/extensions/event_bindings.h" | 13 #include "chrome/renderer/extensions/event_bindings.h" |
| 14 #include "chrome/renderer/extensions/extension_process_bindings.h" | 14 #include "chrome/renderer/extensions/extension_process_bindings.h" |
| 15 #include "chrome/renderer/extensions/js_only_v8_extensions.h" | 15 #include "chrome/renderer/extensions/js_only_v8_extensions.h" |
| 16 #include "chrome/renderer/render_thread.h" | 16 #include "chrome/renderer/render_thread.h" |
| 17 #include "content/renderer/render_view.h" | 17 #include "content/renderer/render_view.h" |
| 18 #include "googleurl/src/gurl.h" | 18 #include "googleurl/src/gurl.h" |
| 19 #include "grit/renderer_resources.h" | 19 #include "grit/renderer_resources.h" |
| 20 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDataSource.h" | 20 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDataSource.h" |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 bool has_permission = | 101 bool has_permission = |
| 102 ExtensionProcessBindings::CurrentContextHasPermission(event_name); | 102 ExtensionProcessBindings::CurrentContextHasPermission(event_name); |
| 103 | 103 |
| 104 if (!has_permission) { | 104 if (!has_permission) { |
| 105 return ExtensionProcessBindings::ThrowPermissionDeniedException( | 105 return ExtensionProcessBindings::ThrowPermissionDeniedException( |
| 106 event_name); | 106 event_name); |
| 107 } | 107 } |
| 108 | 108 |
| 109 if (++listener_counts[event_name] == 1) { | 109 if (++listener_counts[event_name] == 1) { |
| 110 EventBindings::GetRenderThread()->Send( | 110 EventBindings::GetRenderThread()->Send( |
| 111 new ViewHostMsg_ExtensionAddListener(context_info->extension_id, | 111 new ExtensionHostMsg_AddListener(context_info->extension_id, |
| 112 event_name)); | 112 event_name)); |
| 113 } | 113 } |
| 114 | 114 |
| 115 if (++context_info->num_connected_events == 1) | 115 if (++context_info->num_connected_events == 1) |
| 116 context_info->context.ClearWeak(); | 116 context_info->context.ClearWeak(); |
| 117 | 117 |
| 118 } | 118 } |
| 119 | 119 |
| 120 return v8::Undefined(); | 120 return v8::Undefined(); |
| 121 } | 121 } |
| 122 | 122 |
| 123 static v8::Handle<v8::Value> DetachEvent(const v8::Arguments& args) { | 123 static v8::Handle<v8::Value> DetachEvent(const v8::Arguments& args) { |
| 124 DCHECK(args.Length() == 1); | 124 DCHECK(args.Length() == 1); |
| 125 // TODO(erikkay) should enforce that event name is a string in the bindings | 125 // TODO(erikkay) should enforce that event name is a string in the bindings |
| 126 DCHECK(args[0]->IsString() || args[0]->IsUndefined()); | 126 DCHECK(args[0]->IsString() || args[0]->IsUndefined()); |
| 127 | 127 |
| 128 if (args[0]->IsString()) { | 128 if (args[0]->IsString()) { |
| 129 ContextInfo* context_info = GetInfoForCurrentContext(); | 129 ContextInfo* context_info = GetInfoForCurrentContext(); |
| 130 if (!context_info) | 130 if (!context_info) |
| 131 return v8::Undefined(); | 131 return v8::Undefined(); |
| 132 | 132 |
| 133 EventListenerCounts& listener_counts = | 133 EventListenerCounts& listener_counts = |
| 134 GetListenerCounts(context_info->extension_id); | 134 GetListenerCounts(context_info->extension_id); |
| 135 std::string event_name(*v8::String::AsciiValue(args[0])); | 135 std::string event_name(*v8::String::AsciiValue(args[0])); |
| 136 if (--listener_counts[event_name] == 0) { | 136 if (--listener_counts[event_name] == 0) { |
| 137 EventBindings::GetRenderThread()->Send( | 137 EventBindings::GetRenderThread()->Send( |
| 138 new ViewHostMsg_ExtensionRemoveListener(context_info->extension_id, | 138 new ExtensionHostMsg_RemoveListener(context_info->extension_id, |
| 139 event_name)); | 139 event_name)); |
| 140 } | 140 } |
| 141 | 141 |
| 142 if (--context_info->num_connected_events == 0) { | 142 if (--context_info->num_connected_events == 0) { |
| 143 context_info->context.MakeWeak(NULL, &ContextWeakReferenceCallback); | 143 context_info->context.MakeWeak(NULL, &ContextWeakReferenceCallback); |
| 144 } | 144 } |
| 145 } | 145 } |
| 146 | 146 |
| 147 return v8::Undefined(); | 147 return v8::Undefined(); |
| 148 } | 148 } |
| 149 }; | 149 }; |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 // TODO(rafaelw): Consider only doing this check if function_name == | 372 // TODO(rafaelw): Consider only doing this check if function_name == |
| 373 // "Event.dispatchJSON". | 373 // "Event.dispatchJSON". |
| 374 #ifndef NDEBUG | 374 #ifndef NDEBUG |
| 375 if (!retval.IsEmpty() && !retval->IsUndefined()) { | 375 if (!retval.IsEmpty() && !retval->IsUndefined()) { |
| 376 std::string error = *v8::String::AsciiValue(retval); | 376 std::string error = *v8::String::AsciiValue(retval); |
| 377 DCHECK(false) << error; | 377 DCHECK(false) << error; |
| 378 } | 378 } |
| 379 #endif | 379 #endif |
| 380 } | 380 } |
| 381 } | 381 } |
| OLD | NEW |