OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009, 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2009, 2011 Google Inc. 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 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
279 RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], fal
se, ListenerFindOnly); | 279 RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], fal
se, ListenerFindOnly); |
280 | 280 |
281 if (listener) { | 281 if (listener) { |
282 imp->removeEventListener(eventType, listener.get(), useCapture); | 282 imp->removeEventListener(eventType, listener.get(), useCapture); |
283 removeHiddenDependency(args.Holder(), args[1], eventListenerCacheIndex); | 283 removeHiddenDependency(args.Holder(), args[1], eventListenerCacheIndex); |
284 } | 284 } |
285 | 285 |
286 return v8::Undefined(); | 286 return v8::Undefined(); |
287 } | 287 } |
288 | 288 |
| 289 static bool isLegacyTargetOriginDesignation(v8::Handle<v8::Value> value) |
| 290 { |
| 291 if (value->IsString() || value->IsStringObject()) |
| 292 return true; |
| 293 return false; |
| 294 } |
| 295 |
| 296 |
289 static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args
, bool extendedTransfer) | 297 static v8::Handle<v8::Value> handlePostMessageCallback(const v8::Arguments& args
, bool extendedTransfer) |
290 { | 298 { |
291 DOMWindow* window = V8DOMWindow::toNative(args.Holder()); | 299 DOMWindow* window = V8DOMWindow::toNative(args.Holder()); |
292 | 300 |
293 DOMWindow* source = V8Proxy::retrieveFrameForCallingContext()->domWindow(); | 301 DOMWindow* source = V8Proxy::retrieveFrameForCallingContext()->domWindow(); |
294 ASSERT(source->frame()); | 302 ASSERT(source->frame()); |
295 | 303 |
296 // This function has variable arguments and can either be: | 304 // This function has variable arguments and can be: |
297 // postMessage(message, port, targetOrigin); | 305 // Per current spec: |
298 // or | 306 // postMessage(message, targetOrigin) |
299 // postMessage(message, targetOrigin); | 307 // postMessage(message, targetOrigin, {sequence of transferrables}) |
| 308 // Legacy non-standard implementations in webkit allowed: |
| 309 // postMessage(message, {sequence of transferrables}, targetOrigin); |
300 MessagePortArray portArray; | 310 MessagePortArray portArray; |
301 ArrayBufferArray arrayBufferArray; | 311 ArrayBufferArray arrayBufferArray; |
302 String targetOrigin; | 312 String targetOrigin; |
303 { | 313 { |
304 v8::TryCatch tryCatch; | 314 v8::TryCatch tryCatch; |
| 315 int targetOriginArgIndex = 1; |
305 if (args.Length() > 2) { | 316 if (args.Length() > 2) { |
306 if (!extractTransferables(args[2], portArray, arrayBufferArray)) | 317 int transferablesArgIndex = 2; |
| 318 if (isLegacyTargetOriginDesignation(args[2])) { |
| 319 targetOriginArgIndex = 2; |
| 320 transferablesArgIndex = 1; |
| 321 } |
| 322 if (!extractTransferables(args[transferablesArgIndex], portArray, ar
rayBufferArray)) |
307 return v8::Undefined(); | 323 return v8::Undefined(); |
308 } | 324 } |
309 targetOrigin = toWebCoreStringWithNullOrUndefinedCheck(args[1]); | 325 targetOrigin = toWebCoreStringWithNullOrUndefinedCheck(args[targetOrigin
ArgIndex]); |
310 | 326 |
311 if (tryCatch.HasCaught()) | 327 if (tryCatch.HasCaught()) |
312 return v8::Undefined(); | 328 return v8::Undefined(); |
313 } | 329 } |
314 | 330 |
315 | 331 |
316 bool didThrow = false; | 332 bool didThrow = false; |
317 RefPtr<SerializedScriptValue> message = | 333 RefPtr<SerializedScriptValue> message = |
318 SerializedScriptValue::create(args[0], | 334 SerializedScriptValue::create(args[0], |
319 &portArray, | 335 &portArray, |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
605 v8::Handle<v8::Context> context = V8Proxy::context(frame); | 621 v8::Handle<v8::Context> context = V8Proxy::context(frame); |
606 if (context.IsEmpty()) | 622 if (context.IsEmpty()) |
607 return v8::Handle<v8::Object>(); | 623 return v8::Handle<v8::Object>(); |
608 | 624 |
609 v8::Handle<v8::Object> global = context->Global(); | 625 v8::Handle<v8::Object> global = context->Global(); |
610 ASSERT(!global.IsEmpty()); | 626 ASSERT(!global.IsEmpty()); |
611 return global; | 627 return global; |
612 } | 628 } |
613 | 629 |
614 } // namespace WebCore | 630 } // namespace WebCore |
OLD | NEW |