| 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 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 ToV8(impl->frameElement(), v8::Local<v8::Object>::Cast(creation_context), | 152 ToV8(impl->frameElement(), v8::Local<v8::Object>::Cast(creation_context), |
| 153 info.GetIsolate()); | 153 info.GetIsolate()); |
| 154 V8SetReturnValue(info, wrapper); | 154 V8SetReturnValue(info, wrapper); |
| 155 } | 155 } |
| 156 | 156 |
| 157 void V8Window::openerAttributeSetterCustom( | 157 void V8Window::openerAttributeSetterCustom( |
| 158 v8::Local<v8::Value> value, | 158 v8::Local<v8::Value> value, |
| 159 const v8::PropertyCallbackInfo<void>& info) { | 159 const v8::PropertyCallbackInfo<void>& info) { |
| 160 v8::Isolate* isolate = info.GetIsolate(); | 160 v8::Isolate* isolate = info.GetIsolate(); |
| 161 DOMWindow* impl = V8Window::toImpl(info.Holder()); | 161 DOMWindow* impl = V8Window::toImpl(info.Holder()); |
| 162 // TODO(dcheng): Investigate removing this, since opener is not really a | 162 if (!impl->GetFrame()) |
| 163 // cross-origin property (so it shouldn't be accessible to begin with) | |
| 164 ExceptionState exception_state(isolate, ExceptionState::kSetterContext, | |
| 165 "Window", "opener"); | |
| 166 if (!BindingSecurity::ShouldAllowAccessTo(CurrentDOMWindow(info.GetIsolate()), | |
| 167 impl, exception_state)) { | |
| 168 return; | 163 return; |
| 169 } | |
| 170 | 164 |
| 171 // Opener can be shadowed if it is in the same domain. | 165 // Opener can be shadowed if it is in the same domain. |
| 172 // Have a special handling of null value to behave | 166 // Have a special handling of null value to behave |
| 173 // like Firefox. See bug http://b/1224887 & http://b/791706. | 167 // like Firefox. See bug http://b/1224887 & http://b/791706. |
| 174 if (value->IsNull()) { | 168 if (value->IsNull()) { |
| 175 // impl->frame() has to be a non-null LocalFrame. Otherwise, the | 169 // impl->frame() has to be a non-null LocalFrame. Otherwise, the |
| 176 // same-origin check would have failed. | 170 // same-origin check would have failed. |
| 177 DCHECK(impl->GetFrame()); | 171 DCHECK(impl->GetFrame()); |
| 178 ToLocalFrame(impl->GetFrame())->Loader().SetOpener(0); | 172 ToLocalFrame(impl->GetFrame())->Loader().SetOpener(0); |
| 179 } | 173 } |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 // window. Then, removes the following two lines. | 336 // window. Then, removes the following two lines. |
| 343 V8SetReturnValueFast(info, child->DomWindow(), window); | 337 V8SetReturnValueFast(info, child->DomWindow(), window); |
| 344 return; | 338 return; |
| 345 } | 339 } |
| 346 | 340 |
| 347 // This is a cross-origin interceptor. Check that the caller has access to the | 341 // This is a cross-origin interceptor. Check that the caller has access to the |
| 348 // named results. | 342 // named results. |
| 349 if (!BindingSecurity::ShouldAllowAccessTo( | 343 if (!BindingSecurity::ShouldAllowAccessTo( |
| 350 CurrentDOMWindow(info.GetIsolate()), window, | 344 CurrentDOMWindow(info.GetIsolate()), window, |
| 351 BindingSecurity::ErrorReportOption::kDoNotReport)) { | 345 BindingSecurity::ErrorReportOption::kDoNotReport)) { |
| 352 BindingSecurity::FailedAccessCheckFor(info.GetIsolate(), frame); | 346 BindingSecurity::FailedAccessCheckFor( |
| 347 info.GetIsolate(), window->GetWrapperTypeInfo(), info.Holder()); |
| 353 return; | 348 return; |
| 354 } | 349 } |
| 355 | 350 |
| 356 // Search named items in the document. | 351 // Search named items in the document. |
| 357 Document* doc = ToLocalFrame(frame)->GetDocument(); | 352 Document* doc = ToLocalFrame(frame)->GetDocument(); |
| 358 if (!doc || !doc->IsHTMLDocument()) | 353 if (!doc || !doc->IsHTMLDocument()) |
| 359 return; | 354 return; |
| 360 | 355 |
| 361 bool has_named_item = ToHTMLDocument(doc)->HasNamedItem(name); | 356 bool has_named_item = ToHTMLDocument(doc)->HasNamedItem(name); |
| 362 bool has_id_item = doc->HasElementWithId(name); | 357 bool has_id_item = doc->HasElementWithId(name); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 381 if (items->HasExactlyOneItem()) { | 376 if (items->HasExactlyOneItem()) { |
| 382 V8SetReturnValueFast(info, items->item(0), window); | 377 V8SetReturnValueFast(info, items->item(0), window); |
| 383 return; | 378 return; |
| 384 } | 379 } |
| 385 V8SetReturnValueFast(info, items, window); | 380 V8SetReturnValueFast(info, items, window); |
| 386 return; | 381 return; |
| 387 } | 382 } |
| 388 } | 383 } |
| 389 | 384 |
| 390 } // namespace blink | 385 } // namespace blink |
| OLD | NEW |