| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008, 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2008, 2009 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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 return false; | 80 return false; |
| 81 } | 81 } |
| 82 | 82 |
| 83 v8::Local<v8::Object> transferrables = v8::Local<v8::Object>::Cast(value); | 83 v8::Local<v8::Object> transferrables = v8::Local<v8::Object>::Cast(value); |
| 84 | 84 |
| 85 // Validate the passed array of transferrables. | 85 // Validate the passed array of transferrables. |
| 86 for (unsigned int i = 0; i < length; ++i) { | 86 for (unsigned int i = 0; i < length; ++i) { |
| 87 v8::Local<v8::Value> transferrable = transferrables->Get(i); | 87 v8::Local<v8::Value> transferrable = transferrables->Get(i); |
| 88 // Validation of non-null objects, per HTML5 spec 10.3.3. | 88 // Validation of non-null objects, per HTML5 spec 10.3.3. |
| 89 if (isUndefinedOrNull(transferrable)) { | 89 if (isUndefinedOrNull(transferrable)) { |
| 90 setDOMException(InvalidStateError, isolate); | 90 setDOMException(DataCloneError, isolate); |
| 91 return false; | 91 return false; |
| 92 } | 92 } |
| 93 // Validation of Objects implementing an interface, per WebIDL spec 4.1.
15. | 93 // Validation of Objects implementing an interface, per WebIDL spec 4.1.
15. |
| 94 if (V8MessagePort::HasInstance(transferrable, isolate, worldType(isolate
))) { | 94 if (V8MessagePort::HasInstance(transferrable, isolate, worldType(isolate
))) { |
| 95 RefPtr<MessagePort> port = V8MessagePort::toNative(v8::Handle<v8::Ob
ject>::Cast(transferrable)); | 95 RefPtr<MessagePort> port = V8MessagePort::toNative(v8::Handle<v8::Ob
ject>::Cast(transferrable)); |
| 96 // Check for duplicate MessagePorts. | 96 // Check for duplicate MessagePorts. |
| 97 if (ports.contains(port)) { | 97 if (ports.contains(port)) { |
| 98 setDOMException(InvalidStateError, isolate); | 98 setDOMException(DataCloneError, isolate); |
| 99 return false; | 99 return false; |
| 100 } | 100 } |
| 101 ports.append(port.release()); | 101 ports.append(port.release()); |
| 102 } else if (V8ArrayBuffer::HasInstance(transferrable, isolate, worldType(
isolate))) | 102 } else if (V8ArrayBuffer::HasInstance(transferrable, isolate, worldType(
isolate))) |
| 103 arrayBuffers.append(V8ArrayBuffer::toNative(v8::Handle<v8::Object>::
Cast(transferrable))); | 103 arrayBuffers.append(V8ArrayBuffer::toNative(v8::Handle<v8::Object>::
Cast(transferrable))); |
| 104 else { | 104 else { |
| 105 throwTypeError(isolate); | 105 setDOMException(DataCloneError, isolate); |
| 106 return false; | 106 return false; |
| 107 } | 107 } |
| 108 } | 108 } |
| 109 return true; | 109 return true; |
| 110 } | 110 } |
| 111 | 111 |
| 112 bool getMessagePortArray(v8::Local<v8::Value> value, MessagePortArray& ports, v8
::Isolate* isolate) | 112 bool getMessagePortArray(v8::Local<v8::Value> value, MessagePortArray& ports, v8
::Isolate* isolate) |
| 113 { | 113 { |
| 114 ArrayBufferArray arrayBuffers; | 114 if (isUndefinedOrNull(value)) { |
| 115 bool result = extractTransferables(value, ports, arrayBuffers, isolate); | 115 ports.resize(0); |
| 116 if (!result) | 116 return true; |
| 117 return false; | 117 } |
| 118 if (arrayBuffers.size() > 0) { | 118 if (!value->IsArray()) { |
| 119 throwTypeError("MessagePortArray argument must contain only MessagePorts
", isolate); | 119 throwTypeError(isolate); |
| 120 return false; | 120 return false; |
| 121 } | 121 } |
| 122 return true; | 122 bool success = false; |
| 123 ports = toRefPtrNativeArray<MessagePort, V8MessagePort>(value, isolate, &suc
cess); |
| 124 return success; |
| 123 } | 125 } |
| 124 | 126 |
| 125 void removeHiddenDependency(v8::Handle<v8::Object> object, v8::Local<v8::Value>
value, int cacheIndex, v8::Isolate* isolate) | 127 void removeHiddenDependency(v8::Handle<v8::Object> object, v8::Local<v8::Value>
value, int cacheIndex, v8::Isolate* isolate) |
| 126 { | 128 { |
| 127 v8::Local<v8::Value> cache = object->GetInternalField(cacheIndex); | 129 v8::Local<v8::Value> cache = object->GetInternalField(cacheIndex); |
| 128 if (!cache->IsArray()) | 130 if (!cache->IsArray()) |
| 129 return; | 131 return; |
| 130 v8::Local<v8::Array> cacheArray = v8::Local<v8::Array>::Cast(cache); | 132 v8::Local<v8::Array> cacheArray = v8::Local<v8::Array>::Cast(cache); |
| 131 for (int i = cacheArray->Length() - 1; i >= 0; --i) { | 133 for (int i = cacheArray->Length() - 1; i >= 0; --i) { |
| 132 v8::Local<v8::Value> cached = cacheArray->Get(v8::Integer::New(i, isolat
e)); | 134 v8::Local<v8::Value> cached = cacheArray->Get(v8::Integer::New(i, isolat
e)); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 153 | 155 |
| 154 ScriptExecutionContext* getScriptExecutionContext() | 156 ScriptExecutionContext* getScriptExecutionContext() |
| 155 { | 157 { |
| 156 if (WorkerScriptController* controller = WorkerScriptController::controllerF
orContext()) | 158 if (WorkerScriptController* controller = WorkerScriptController::controllerF
orContext()) |
| 157 return controller->workerGlobalScope(); | 159 return controller->workerGlobalScope(); |
| 158 | 160 |
| 159 return currentDocument(); | 161 return currentDocument(); |
| 160 } | 162 } |
| 161 | 163 |
| 162 } // namespace WebCore | 164 } // namespace WebCore |
| OLD | NEW |