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 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 BindingSecurity::ErrorReportOption::kDoNotReport)) { | 155 BindingSecurity::ErrorReportOption::kDoNotReport)) { |
156 V8SetReturnValueNull(info); | 156 V8SetReturnValueNull(info); |
157 return; | 157 return; |
158 } | 158 } |
159 | 159 |
160 // The wrapper for an <iframe> should get its prototype from the context of | 160 // The wrapper for an <iframe> should get its prototype from the context of |
161 // the frame it's in, rather than its own frame. | 161 // the frame it's in, rather than its own frame. |
162 // So, use its containing document as the creation context when wrapping. | 162 // So, use its containing document as the creation context when wrapping. |
163 v8::Local<v8::Value> creation_context = ToV8( | 163 v8::Local<v8::Value> creation_context = ToV8( |
164 &impl->frameElement()->GetDocument(), info.Holder(), info.GetIsolate()); | 164 &impl->frameElement()->GetDocument(), info.Holder(), info.GetIsolate()); |
165 RELEASE_ASSERT(!creation_context.IsEmpty()); | 165 CHECK(!creation_context.IsEmpty()); |
166 v8::Local<v8::Value> wrapper = | 166 v8::Local<v8::Value> wrapper = |
167 ToV8(impl->frameElement(), v8::Local<v8::Object>::Cast(creation_context), | 167 ToV8(impl->frameElement(), v8::Local<v8::Object>::Cast(creation_context), |
168 info.GetIsolate()); | 168 info.GetIsolate()); |
169 V8SetReturnValue(info, wrapper); | 169 V8SetReturnValue(info, wrapper); |
170 } | 170 } |
171 | 171 |
172 void V8Window::openerAttributeSetterCustom( | 172 void V8Window::openerAttributeSetterCustom( |
173 v8::Local<v8::Value> value, | 173 v8::Local<v8::Value> value, |
174 const v8::PropertyCallbackInfo<void>& info) { | 174 const v8::PropertyCallbackInfo<void>& info) { |
175 v8::Isolate* isolate = info.GetIsolate(); | 175 v8::Isolate* isolate = info.GetIsolate(); |
176 DOMWindow* impl = V8Window::toImpl(info.Holder()); | 176 DOMWindow* impl = V8Window::toImpl(info.Holder()); |
177 // TODO(dcheng): Investigate removing this, since opener is not really a | 177 // TODO(dcheng): Investigate removing this, since opener is not really a |
178 // cross-origin property (so it shouldn't be accessible to begin with) | 178 // cross-origin property (so it shouldn't be accessible to begin with) |
179 ExceptionState exception_state(isolate, ExceptionState::kSetterContext, | 179 ExceptionState exception_state(isolate, ExceptionState::kSetterContext, |
180 "Window", "opener"); | 180 "Window", "opener"); |
181 if (!BindingSecurity::ShouldAllowAccessTo(CurrentDOMWindow(info.GetIsolate()), | 181 if (!BindingSecurity::ShouldAllowAccessTo(CurrentDOMWindow(info.GetIsolate()), |
182 impl, exception_state)) { | 182 impl, exception_state)) { |
183 return; | 183 return; |
184 } | 184 } |
185 | 185 |
186 // Opener can be shadowed if it is in the same domain. | 186 // Opener can be shadowed if it is in the same domain. |
187 // Have a special handling of null value to behave | 187 // Have a special handling of null value to behave |
188 // like Firefox. See bug http://b/1224887 & http://b/791706. | 188 // like Firefox. See bug http://b/1224887 & http://b/791706. |
189 if (value->IsNull()) { | 189 if (value->IsNull()) { |
190 // impl->frame() has to be a non-null LocalFrame. Otherwise, the | 190 // impl->frame() has to be a non-null LocalFrame. Otherwise, the |
191 // same-origin check would have failed. | 191 // same-origin check would have failed. |
192 ASSERT(impl->GetFrame()); | 192 DCHECK(impl->GetFrame()); |
193 ToLocalFrame(impl->GetFrame())->Loader().SetOpener(0); | 193 ToLocalFrame(impl->GetFrame())->Loader().SetOpener(0); |
194 } | 194 } |
195 | 195 |
196 // Delete the accessor from the inner object. | 196 // Delete the accessor from the inner object. |
197 if (info.Holder() | 197 if (info.Holder() |
198 ->Delete(isolate->GetCurrentContext(), | 198 ->Delete(isolate->GetCurrentContext(), |
199 V8AtomicString(isolate, "opener")) | 199 V8AtomicString(isolate, "opener")) |
200 .IsNothing()) { | 200 .IsNothing()) { |
201 return; | 201 return; |
202 } | 202 } |
(...skipping 21 matching lines...) Expand all Loading... |
224 | 224 |
225 // None of these need to be RefPtr because info and context are guaranteed | 225 // None of these need to be RefPtr because info and context are guaranteed |
226 // to hold on to them. | 226 // to hold on to them. |
227 DOMWindow* window = V8Window::toImpl(info.Holder()); | 227 DOMWindow* window = V8Window::toImpl(info.Holder()); |
228 // TODO(yukishiino): The HTML spec specifies that we should use the | 228 // TODO(yukishiino): The HTML spec specifies that we should use the |
229 // Incumbent Realm instead of the Current Realm, but currently we don't have | 229 // Incumbent Realm instead of the Current Realm, but currently we don't have |
230 // a way to retrieve the Incumbent Realm. See also: | 230 // a way to retrieve the Incumbent Realm. See also: |
231 // https://html.spec.whatwg.org/multipage/comms.html#dom-window-postmessage | 231 // https://html.spec.whatwg.org/multipage/comms.html#dom-window-postmessage |
232 LocalDOMWindow* source = CurrentDOMWindow(info.GetIsolate()); | 232 LocalDOMWindow* source = CurrentDOMWindow(info.GetIsolate()); |
233 | 233 |
234 ASSERT(window); | 234 DCHECK(window); |
235 UseCounter::Count(window->GetFrame(), UseCounter::kWindowPostMessage); | 235 UseCounter::Count(window->GetFrame(), UseCounter::kWindowPostMessage); |
236 | 236 |
237 // If called directly by WebCore we don't have a calling context. | 237 // If called directly by WebCore we don't have a calling context. |
238 if (!source) { | 238 if (!source) { |
239 exception_state.ThrowTypeError("No active calling context exists."); | 239 exception_state.ThrowTypeError("No active calling context exists."); |
240 return; | 240 return; |
241 } | 241 } |
242 | 242 |
243 // This function has variable arguments and can be: | 243 // This function has variable arguments and can be: |
244 // postMessage(message, targetOrigin) | 244 // postMessage(message, targetOrigin) |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
392 if (items->HasExactlyOneItem()) { | 392 if (items->HasExactlyOneItem()) { |
393 V8SetReturnValueFast(info, items->item(0), window); | 393 V8SetReturnValueFast(info, items->item(0), window); |
394 return; | 394 return; |
395 } | 395 } |
396 V8SetReturnValueFast(info, items, window); | 396 V8SetReturnValueFast(info, items, window); |
397 return; | 397 return; |
398 } | 398 } |
399 } | 399 } |
400 | 400 |
401 } // namespace blink | 401 } // namespace blink |
OLD | NEW |