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

Side by Side Diff: webkit/port/bindings/v8/v8_custom.cpp

Issue 92051: Merge: chromium side [42671:42725]... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 8 months 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
« no previous file with comments | « webkit/glue/webframe_impl.cc ('k') | webkit/tools/layout_tests/test_expectations.txt » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2000 Harri Porten (porten@kde.org) 2 * Copyright (C) 2000 Harri Porten (porten@kde.org)
3 * Copyright (C) 2001 Peter Kelly (pmk@post.com) 3 * Copyright (C) 2001 Peter Kelly (pmk@post.com)
4 * Copyright (C) 2004-2006 Apple Computer, Inc. 4 * Copyright (C) 2004-2006 Apple Computer, Inc.
5 * Copyright (C) 2006 James G. Speth (speth@end.com) 5 * Copyright (C) 2006 James G. Speth (speth@end.com)
6 * Copyright (C) 2006 Samuel Weinig (sam@webkit.org) 6 * Copyright (C) 2006 Samuel Weinig (sam@webkit.org)
7 * Copyright 2007, 2008 Google Inc. All Rights Reserved. 7 * Copyright 2007, 2008 Google Inc. All Rights Reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public 10 * modify it under the terms of the GNU Lesser General Public
(...skipping 1054 matching lines...) Expand 10 before | Expand all | Expand 10 after
1065 1065
1066 Document* doc = imp->frame()->document(); 1066 Document* doc = imp->frame()->document();
1067 if (!doc) 1067 if (!doc)
1068 return; 1068 return;
1069 1069
1070 String key = ToWebCoreString(name); 1070 String key = ToWebCoreString(name);
1071 String event_type = EventNameFromAttributeName(key); 1071 String event_type = EventNameFromAttributeName(key);
1072 1072
1073 if (value->IsNull()) { 1073 if (value->IsNull()) {
1074 // Clear the event listener 1074 // Clear the event listener
1075 imp->clearInlineEventListener(event_type); 1075 imp->clearAttributeEventListener(event_type);
1076 } else { 1076 } else {
1077 V8Proxy* proxy = V8Proxy::retrieve(imp->frame()); 1077 V8Proxy* proxy = V8Proxy::retrieve(imp->frame());
1078 if (!proxy) 1078 if (!proxy)
1079 return; 1079 return;
1080 1080
1081 RefPtr<EventListener> listener = 1081 RefPtr<EventListener> listener =
1082 proxy->FindOrCreateV8EventListener(value, true); 1082 proxy->FindOrCreateV8EventListener(value, true);
1083 if (listener) { 1083 if (listener) {
1084 imp->setInlineEventListener(event_type, listener); 1084 imp->setAttributeEventListener(event_type, listener);
1085 } 1085 }
1086 } 1086 }
1087 } 1087 }
1088 1088
1089 1089
1090 ACCESSOR_GETTER(DOMWindowEventHandler) { 1090 ACCESSOR_GETTER(DOMWindowEventHandler) {
1091 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper( 1091 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper(
1092 V8ClassIndex::DOMWINDOW, info.This()); 1092 V8ClassIndex::DOMWINDOW, info.This());
1093 if (holder.IsEmpty()) 1093 if (holder.IsEmpty())
1094 return v8::Undefined(); 1094 return v8::Undefined();
1095 1095
1096 DOMWindow* imp = V8Proxy::ToNativeObject<DOMWindow>( 1096 DOMWindow* imp = V8Proxy::ToNativeObject<DOMWindow>(
1097 V8ClassIndex::DOMWINDOW, holder); 1097 V8ClassIndex::DOMWINDOW, holder);
1098 if (!imp->frame()) 1098 if (!imp->frame())
1099 return v8::Undefined(); 1099 return v8::Undefined();
1100 1100
1101 Document* doc = imp->frame()->document(); 1101 Document* doc = imp->frame()->document();
1102 if (!doc) 1102 if (!doc)
1103 return v8::Undefined(); 1103 return v8::Undefined();
1104 1104
1105 String key = ToWebCoreString(name); 1105 String key = ToWebCoreString(name);
1106 String event_type = EventNameFromAttributeName(key); 1106 String event_type = EventNameFromAttributeName(key);
1107 1107
1108 EventListener* listener = imp->getInlineEventListener(event_type); 1108 EventListener* listener = imp->getAttributeEventListener(event_type);
1109 return V8Proxy::EventListenerToV8Object(listener); 1109 return V8Proxy::EventListenerToV8Object(listener);
1110 } 1110 }
1111 1111
1112 1112
1113 ACCESSOR_SETTER(ElementEventHandler) { 1113 ACCESSOR_SETTER(ElementEventHandler) {
1114 Node* node = V8Proxy::DOMWrapperToNode<Node>(info.Holder()); 1114 Node* node = V8Proxy::DOMWrapperToNode<Node>(info.Holder());
1115 1115
1116 // Name starts with 'on', remove them. 1116 // Name starts with 'on', remove them.
1117 String key = ToWebCoreString(name); 1117 String key = ToWebCoreString(name);
1118 ASSERT(key.startsWith("on")); 1118 ASSERT(key.startsWith("on"));
1119 String event_type = key.substring(2); 1119 String event_type = key.substring(2);
1120 1120
1121 // Set handler if the value is a function. Otherwise, clear the 1121 // Set handler if the value is a function. Otherwise, clear the
1122 // event handler. 1122 // event handler.
1123 if (value->IsFunction()) { 1123 if (value->IsFunction()) {
1124 V8Proxy* proxy = V8Proxy::retrieve(node->document()->frame()); 1124 V8Proxy* proxy = V8Proxy::retrieve(node->document()->frame());
1125 // the document might be created using createDocument, 1125 // the document might be created using createDocument,
1126 // which does not have a frame, use the active frame 1126 // which does not have a frame, use the active frame
1127 if (!proxy) 1127 if (!proxy)
1128 proxy = V8Proxy::retrieve(V8Proxy::retrieveActiveFrame()); 1128 proxy = V8Proxy::retrieve(V8Proxy::retrieveActiveFrame());
1129 if (!proxy) 1129 if (!proxy)
1130 return; 1130 return;
1131 1131
1132 RefPtr<EventListener> listener = 1132 RefPtr<EventListener> listener =
1133 proxy->FindOrCreateV8EventListener(value, true); 1133 proxy->FindOrCreateV8EventListener(value, true);
1134 if (listener) { 1134 if (listener) {
1135 node->setInlineEventListener(event_type, listener); 1135 node->setAttributeEventListener(event_type, listener);
1136 } 1136 }
1137 } else { 1137 } else {
1138 node->clearInlineEventListener(event_type); 1138 node->clearAttributeEventListener(event_type);
1139 } 1139 }
1140 } 1140 }
1141 1141
1142 1142
1143 ACCESSOR_GETTER(ElementEventHandler) { 1143 ACCESSOR_GETTER(ElementEventHandler) {
1144 Node* node = V8Proxy::DOMWrapperToNode<Node>(info.Holder()); 1144 Node* node = V8Proxy::DOMWrapperToNode<Node>(info.Holder());
1145 1145
1146 // Name starts with 'on', remove them. 1146 // Name starts with 'on', remove them.
1147 String key = ToWebCoreString(name); 1147 String key = ToWebCoreString(name);
1148 ASSERT(key.startsWith("on")); 1148 ASSERT(key.startsWith("on"));
1149 String event_type = key.substring(2); 1149 String event_type = key.substring(2);
1150 1150
1151 EventListener* listener = node->getInlineEventListener(event_type); 1151 EventListener* listener = node->getAttributeEventListener(event_type);
1152 return V8Proxy::EventListenerToV8Object(listener); 1152 return V8Proxy::EventListenerToV8Object(listener);
1153 } 1153 }
1154 1154
1155 // --------------- Security Checks ------------------------- 1155 // --------------- Security Checks -------------------------
1156 NAMED_ACCESS_CHECK(DOMWindow) { 1156 NAMED_ACCESS_CHECK(DOMWindow) {
1157 ASSERT(V8ClassIndex::FromInt(data->Int32Value()) == V8ClassIndex::DOMWINDOW); 1157 ASSERT(V8ClassIndex::FromInt(data->Int32Value()) == V8ClassIndex::DOMWINDOW);
1158 v8::Handle<v8::Value> window = 1158 v8::Handle<v8::Value> window =
1159 V8Proxy::LookupDOMWrapper(V8ClassIndex::DOMWINDOW, host); 1159 V8Proxy::LookupDOMWrapper(V8ClassIndex::DOMWINDOW, host);
1160 if (window.IsEmpty()) 1160 if (window.IsEmpty())
1161 return false; // the frame is gone. 1161 return false; // the frame is gone.
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1303 #undef MAKE_CASE 1303 #undef MAKE_CASE
1304 1304
1305 default: 1305 default:
1306 return V8ClassIndex::INVALID_CLASS_INDEX; 1306 return V8ClassIndex::INVALID_CLASS_INDEX;
1307 } 1307 }
1308 } 1308 }
1309 1309
1310 #endif // ENABLE(SVG) 1310 #endif // ENABLE(SVG)
1311 1311
1312 } // namespace WebCore 1312 } // namespace WebCore
OLDNEW
« no previous file with comments | « webkit/glue/webframe_impl.cc ('k') | webkit/tools/layout_tests/test_expectations.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698