| OLD | NEW |
| 1 // Copyright (c) 2008, Google Inc. | 1 // Copyright (c) 2008, Google Inc. |
| 2 // All rights reserved. | 2 // All rights reserved. |
| 3 // | 3 // |
| 4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
| 5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
| 6 // met: | 6 // met: |
| 7 // | 7 // |
| 8 // * Redistributions of source code must retain the above copyright | 8 // * Redistributions of source code must retain the above copyright |
| 9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. |
| 10 // * Redistributions in binary form must reproduce the above | 10 // * Redistributions in binary form must reproduce the above |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 cache_array->Delete(i); | 74 cache_array->Delete(i); |
| 75 return; | 75 return; |
| 76 } | 76 } |
| 77 } | 77 } |
| 78 | 78 |
| 79 // We should only get here if we try to remove an event listener that was | 79 // We should only get here if we try to remove an event listener that was |
| 80 // never added. | 80 // never added. |
| 81 } | 81 } |
| 82 | 82 |
| 83 ACCESSOR_GETTER(MessagePortOnmessage) { | 83 ACCESSOR_GETTER(MessagePortOnmessage) { |
| 84 INC_STATS(L"DOM.MessagePort.onmessage._get"); | 84 INC_STATS("DOM.MessagePort.onmessage._get"); |
| 85 MessagePort* imp = V8Proxy::ToNativeObject<MessagePort>( | 85 MessagePort* imp = V8Proxy::ToNativeObject<MessagePort>( |
| 86 V8ClassIndex::MESSAGEPORT, info.Holder()); | 86 V8ClassIndex::MESSAGEPORT, info.Holder()); |
| 87 if (imp->onmessage()) { | 87 if (imp->onmessage()) { |
| 88 V8ObjectEventListener* listener = | 88 V8ObjectEventListener* listener = |
| 89 static_cast<V8ObjectEventListener*>(imp->onmessage()); | 89 static_cast<V8ObjectEventListener*>(imp->onmessage()); |
| 90 v8::Local<v8::Object> v8_listener = listener->GetListenerObject(); | 90 v8::Local<v8::Object> v8_listener = listener->GetListenerObject(); |
| 91 return v8_listener; | 91 return v8_listener; |
| 92 } | 92 } |
| 93 return v8::Undefined(); | 93 return v8::Undefined(); |
| 94 } | 94 } |
| 95 | 95 |
| 96 ACCESSOR_SETTER(MessagePortOnmessage) { | 96 ACCESSOR_SETTER(MessagePortOnmessage) { |
| 97 INC_STATS(L"DOM.MessagePort.onmessage._set"); | 97 INC_STATS("DOM.MessagePort.onmessage._set"); |
| 98 MessagePort* imp = V8Proxy::ToNativeObject<MessagePort>( | 98 MessagePort* imp = V8Proxy::ToNativeObject<MessagePort>( |
| 99 V8ClassIndex::MESSAGEPORT, info.Holder()); | 99 V8ClassIndex::MESSAGEPORT, info.Holder()); |
| 100 if (value->IsNull()) { | 100 if (value->IsNull()) { |
| 101 if (imp->onmessage()) { | 101 if (imp->onmessage()) { |
| 102 V8ObjectEventListener* listener = | 102 V8ObjectEventListener* listener = |
| 103 static_cast<V8ObjectEventListener*>(imp->onmessage()); | 103 static_cast<V8ObjectEventListener*>(imp->onmessage()); |
| 104 v8::Local<v8::Object> v8_listener = listener->GetListenerObject(); | 104 v8::Local<v8::Object> v8_listener = listener->GetListenerObject(); |
| 105 RemoveHiddenDependency(info.Holder(), v8_listener); | 105 RemoveHiddenDependency(info.Holder(), v8_listener); |
| 106 } | 106 } |
| 107 | 107 |
| 108 // Clear the listener | 108 // Clear the listener |
| 109 imp->setOnmessage(0); | 109 imp->setOnmessage(0); |
| 110 | 110 |
| 111 } else { | 111 } else { |
| 112 V8Proxy* proxy = V8Proxy::retrieve(imp->scriptExecutionContext()); | 112 V8Proxy* proxy = V8Proxy::retrieve(imp->scriptExecutionContext()); |
| 113 if (!proxy) | 113 if (!proxy) |
| 114 return; | 114 return; |
| 115 | 115 |
| 116 RefPtr<EventListener> listener = | 116 RefPtr<EventListener> listener = |
| 117 proxy->FindOrCreateObjectEventListener(value, false); | 117 proxy->FindOrCreateObjectEventListener(value, false); |
| 118 if (listener) { | 118 if (listener) { |
| 119 imp->setOnmessage(listener); | 119 imp->setOnmessage(listener); |
| 120 CreateHiddenDependency(info.Holder(), value); | 120 CreateHiddenDependency(info.Holder(), value); |
| 121 } | 121 } |
| 122 } | 122 } |
| 123 } | 123 } |
| 124 | 124 |
| 125 ACCESSOR_GETTER(MessagePortOnclose) { | 125 ACCESSOR_GETTER(MessagePortOnclose) { |
| 126 INC_STATS(L"DOM.MessagePort.onclose._get"); | 126 INC_STATS("DOM.MessagePort.onclose._get"); |
| 127 MessagePort* imp = V8Proxy::ToNativeObject<MessagePort>( | 127 MessagePort* imp = V8Proxy::ToNativeObject<MessagePort>( |
| 128 V8ClassIndex::MESSAGEPORT, info.Holder()); | 128 V8ClassIndex::MESSAGEPORT, info.Holder()); |
| 129 if (imp->onclose()) { | 129 if (imp->onclose()) { |
| 130 V8ObjectEventListener* listener = | 130 V8ObjectEventListener* listener = |
| 131 static_cast<V8ObjectEventListener*>(imp->onclose()); | 131 static_cast<V8ObjectEventListener*>(imp->onclose()); |
| 132 v8::Local<v8::Object> v8_listener = listener->GetListenerObject(); | 132 v8::Local<v8::Object> v8_listener = listener->GetListenerObject(); |
| 133 return v8_listener; | 133 return v8_listener; |
| 134 } | 134 } |
| 135 return v8::Undefined(); | 135 return v8::Undefined(); |
| 136 } | 136 } |
| 137 | 137 |
| 138 ACCESSOR_SETTER(MessagePortOnclose) { | 138 ACCESSOR_SETTER(MessagePortOnclose) { |
| 139 INC_STATS(L"DOM.MessagePort.onclose._set"); | 139 INC_STATS("DOM.MessagePort.onclose._set"); |
| 140 MessagePort* imp = V8Proxy::ToNativeObject<MessagePort>( | 140 MessagePort* imp = V8Proxy::ToNativeObject<MessagePort>( |
| 141 V8ClassIndex::MESSAGEPORT, info.Holder()); | 141 V8ClassIndex::MESSAGEPORT, info.Holder()); |
| 142 if (value->IsNull()) { | 142 if (value->IsNull()) { |
| 143 if (imp->onclose()) { | 143 if (imp->onclose()) { |
| 144 V8ObjectEventListener* listener = | 144 V8ObjectEventListener* listener = |
| 145 static_cast<V8ObjectEventListener*>(imp->onclose()); | 145 static_cast<V8ObjectEventListener*>(imp->onclose()); |
| 146 v8::Local<v8::Object> v8_listener = listener->GetListenerObject(); | 146 v8::Local<v8::Object> v8_listener = listener->GetListenerObject(); |
| 147 RemoveHiddenDependency(info.Holder(), v8_listener); | 147 RemoveHiddenDependency(info.Holder(), v8_listener); |
| 148 } | 148 } |
| 149 | 149 |
| 150 // Clear the listener | 150 // Clear the listener |
| 151 imp->setOnclose(0); | 151 imp->setOnclose(0); |
| 152 } else { | 152 } else { |
| 153 V8Proxy* proxy = V8Proxy::retrieve(imp->scriptExecutionContext()); | 153 V8Proxy* proxy = V8Proxy::retrieve(imp->scriptExecutionContext()); |
| 154 if (!proxy) | 154 if (!proxy) |
| 155 return; | 155 return; |
| 156 | 156 |
| 157 RefPtr<EventListener> listener = | 157 RefPtr<EventListener> listener = |
| 158 proxy->FindOrCreateObjectEventListener(value, false); | 158 proxy->FindOrCreateObjectEventListener(value, false); |
| 159 if (listener) { | 159 if (listener) { |
| 160 imp->setOnclose(listener); | 160 imp->setOnclose(listener); |
| 161 CreateHiddenDependency(info.Holder(), value); | 161 CreateHiddenDependency(info.Holder(), value); |
| 162 } | 162 } |
| 163 } | 163 } |
| 164 } | 164 } |
| 165 | 165 |
| 166 CALLBACK_FUNC_DECL(MessagePortStartConversation) { | 166 CALLBACK_FUNC_DECL(MessagePortStartConversation) { |
| 167 INC_STATS(L"DOM.MessagePort.StartConversation()"); | 167 INC_STATS("DOM.MessagePort.StartConversation()"); |
| 168 if (args.Length() < 1) { | 168 if (args.Length() < 1) { |
| 169 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, "Not enough arguments"); | 169 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, "Not enough arguments"); |
| 170 return v8::Undefined(); | 170 return v8::Undefined(); |
| 171 } | 171 } |
| 172 | 172 |
| 173 MessagePort* imp = V8Proxy::ToNativeObject<MessagePort>( | 173 MessagePort* imp = V8Proxy::ToNativeObject<MessagePort>( |
| 174 V8ClassIndex::MESSAGEPORT, args.Holder()); | 174 V8ClassIndex::MESSAGEPORT, args.Holder()); |
| 175 | 175 |
| 176 V8Proxy* proxy = V8Proxy::retrieve(imp->scriptExecutionContext()); | 176 V8Proxy* proxy = V8Proxy::retrieve(imp->scriptExecutionContext()); |
| 177 if (!proxy) | 177 if (!proxy) |
| 178 return v8::Undefined(); | 178 return v8::Undefined(); |
| 179 | 179 |
| 180 RefPtr<MessagePort> port = | 180 RefPtr<MessagePort> port = |
| 181 imp->startConversation(imp->scriptExecutionContext(), | 181 imp->startConversation(imp->scriptExecutionContext(), |
| 182 ToWebCoreString(args[0])); | 182 ToWebCoreString(args[0])); |
| 183 v8::Handle<v8::Value> wrapper = | 183 v8::Handle<v8::Value> wrapper = |
| 184 V8Proxy::ToV8Object(V8ClassIndex::MESSAGEPORT, port.get()); | 184 V8Proxy::ToV8Object(V8ClassIndex::MESSAGEPORT, port.get()); |
| 185 return wrapper; | 185 return wrapper; |
| 186 } | 186 } |
| 187 | 187 |
| 188 CALLBACK_FUNC_DECL(MessagePortAddEventListener) { | 188 CALLBACK_FUNC_DECL(MessagePortAddEventListener) { |
| 189 INC_STATS(L"DOM.MessagePort.AddEventListener()"); | 189 INC_STATS("DOM.MessagePort.AddEventListener()"); |
| 190 MessagePort* imp = V8Proxy::ToNativeObject<MessagePort>( | 190 MessagePort* imp = V8Proxy::ToNativeObject<MessagePort>( |
| 191 V8ClassIndex::MESSAGEPORT, args.Holder()); | 191 V8ClassIndex::MESSAGEPORT, args.Holder()); |
| 192 | 192 |
| 193 V8Proxy* proxy = V8Proxy::retrieve(imp->scriptExecutionContext()); | 193 V8Proxy* proxy = V8Proxy::retrieve(imp->scriptExecutionContext()); |
| 194 if (!proxy) | 194 if (!proxy) |
| 195 return v8::Undefined(); | 195 return v8::Undefined(); |
| 196 | 196 |
| 197 RefPtr<EventListener> listener = | 197 RefPtr<EventListener> listener = |
| 198 proxy->FindOrCreateObjectEventListener(args[1], false); | 198 proxy->FindOrCreateObjectEventListener(args[1], false); |
| 199 if (listener) { | 199 if (listener) { |
| 200 String type = ToWebCoreString(args[0]); | 200 String type = ToWebCoreString(args[0]); |
| 201 bool useCapture = args[2]->BooleanValue(); | 201 bool useCapture = args[2]->BooleanValue(); |
| 202 imp->addEventListener(type, listener, useCapture); | 202 imp->addEventListener(type, listener, useCapture); |
| 203 | 203 |
| 204 CreateHiddenDependency(args.Holder(), args[1]); | 204 CreateHiddenDependency(args.Holder(), args[1]); |
| 205 } | 205 } |
| 206 return v8::Undefined(); | 206 return v8::Undefined(); |
| 207 } | 207 } |
| 208 | 208 |
| 209 CALLBACK_FUNC_DECL(MessagePortRemoveEventListener) { | 209 CALLBACK_FUNC_DECL(MessagePortRemoveEventListener) { |
| 210 INC_STATS(L"DOM.MessagePort.RemoveEventListener()"); | 210 INC_STATS("DOM.MessagePort.RemoveEventListener()"); |
| 211 MessagePort* imp = V8Proxy::ToNativeObject<MessagePort>( | 211 MessagePort* imp = V8Proxy::ToNativeObject<MessagePort>( |
| 212 V8ClassIndex::MESSAGEPORT, args.Holder()); | 212 V8ClassIndex::MESSAGEPORT, args.Holder()); |
| 213 | 213 |
| 214 V8Proxy* proxy = V8Proxy::retrieve(imp->scriptExecutionContext()); | 214 V8Proxy* proxy = V8Proxy::retrieve(imp->scriptExecutionContext()); |
| 215 if (!proxy) | 215 if (!proxy) |
| 216 return v8::Undefined(); // probably leaked | 216 return v8::Undefined(); // probably leaked |
| 217 | 217 |
| 218 RefPtr<EventListener> listener = | 218 RefPtr<EventListener> listener = |
| 219 proxy->FindObjectEventListener(args[1], false); | 219 proxy->FindObjectEventListener(args[1], false); |
| 220 | 220 |
| 221 if (listener) { | 221 if (listener) { |
| 222 String type = ToWebCoreString(args[0]); | 222 String type = ToWebCoreString(args[0]); |
| 223 bool useCapture = args[2]->BooleanValue(); | 223 bool useCapture = args[2]->BooleanValue(); |
| 224 imp->removeEventListener(type, listener.get(), useCapture); | 224 imp->removeEventListener(type, listener.get(), useCapture); |
| 225 | 225 |
| 226 RemoveHiddenDependency(args.Holder(), args[1]); | 226 RemoveHiddenDependency(args.Holder(), args[1]); |
| 227 } | 227 } |
| 228 | 228 |
| 229 return v8::Undefined(); | 229 return v8::Undefined(); |
| 230 } | 230 } |
| 231 | 231 |
| 232 | 232 |
| 233 } // namespace WebCore | 233 } // namespace WebCore |
| OLD | NEW |