OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008, 2009, 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2008, 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 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
471 ASSERT(m_world->isMainWorld()); | 471 ASSERT(m_world->isMainWorld()); |
472 if (!isGlobalInitialized()) | 472 if (!isGlobalInitialized()) |
473 return; | 473 return; |
474 if (!isContextInitialized()) | 474 if (!isContextInitialized()) |
475 return; | 475 return; |
476 updateActivityLogger(); | 476 updateActivityLogger(); |
477 updateDocumentProperty(); | 477 updateDocumentProperty(); |
478 updateSecurityOrigin(m_frame->securityContext()->getSecurityOrigin()); | 478 updateSecurityOrigin(m_frame->securityContext()->getSecurityOrigin()); |
479 } | 479 } |
480 | 480 |
| 481 static v8::Local<v8::Value> getNamedProperty(HTMLDocument* htmlDocument, const A
tomicString& key, v8::Local<v8::Object> creationContext, v8::Isolate* isolate) |
| 482 { |
| 483 if (!htmlDocument->hasNamedItem(key) && !htmlDocument->hasExtraNamedItem(key
)) |
| 484 return v8Undefined(); |
| 485 |
| 486 DocumentNameCollection* items = htmlDocument->documentNamedItems(key); |
| 487 if (items->isEmpty()) |
| 488 return v8Undefined(); |
| 489 |
| 490 if (items->hasExactlyOneItem()) { |
| 491 HTMLElement* element = items->item(0); |
| 492 ASSERT(element); |
| 493 Frame* frame = isHTMLIFrameElement(*element) ? toHTMLIFrameElement(*elem
ent).contentFrame() : 0; |
| 494 if (frame) |
| 495 return toV8(frame->domWindow(), creationContext, isolate); |
| 496 return toV8(element, creationContext, isolate); |
| 497 } |
| 498 return toV8(items, creationContext, isolate); |
| 499 } |
| 500 |
| 501 static void getter(v8::Local<v8::Name> property, const v8::PropertyCallbackInfo<
v8::Value>& info) |
| 502 { |
| 503 if (!property->IsString()) |
| 504 return; |
| 505 // FIXME: Consider passing StringImpl directly. |
| 506 AtomicString name = toCoreAtomicString(property.As<v8::String>()); |
| 507 HTMLDocument* htmlDocument = V8HTMLDocument::toImpl(info.Holder()); |
| 508 ASSERT(htmlDocument); |
| 509 v8::Local<v8::Value> result = getNamedProperty(htmlDocument, name, info.Hold
er(), info.GetIsolate()); |
| 510 if (!result.IsEmpty()) { |
| 511 v8SetReturnValue(info, result); |
| 512 return; |
| 513 } |
| 514 v8::Local<v8::Value> prototype = info.Holder()->GetPrototype(); |
| 515 if (prototype->IsObject()) { |
| 516 v8::Local<v8::Value> value; |
| 517 if (prototype.As<v8::Object>()->Get(info.GetIsolate()->GetCurrentContext
(), property).ToLocal(&value)) |
| 518 v8SetReturnValue(info, value); |
| 519 } |
| 520 } |
| 521 |
| 522 void WindowProxy::namedItemAdded(HTMLDocument* document, const AtomicString& nam
e) |
| 523 { |
| 524 ASSERT(m_world->isMainWorld()); |
| 525 |
| 526 if (!isContextInitialized() || !m_scriptState->contextIsValid()) |
| 527 return; |
| 528 |
| 529 ScriptState::Scope scope(m_scriptState.get()); |
| 530 ASSERT(!m_document.isEmpty()); |
| 531 v8::Local<v8::Context> context = m_scriptState->context(); |
| 532 v8::Local<v8::Object> documentHandle = m_document.newLocal(m_isolate); |
| 533 checkDocumentWrapper(documentHandle, document); |
| 534 documentHandle->SetAccessor(context, v8String(m_isolate, name), getter); |
| 535 } |
| 536 |
| 537 void WindowProxy::namedItemRemoved(HTMLDocument* document, const AtomicString& n
ame) |
| 538 { |
| 539 ASSERT(m_world->isMainWorld()); |
| 540 |
| 541 if (!isContextInitialized()) |
| 542 return; |
| 543 |
| 544 if (document->hasNamedItem(name) || document->hasExtraNamedItem(name)) |
| 545 return; |
| 546 |
| 547 ScriptState::Scope scope(m_scriptState.get()); |
| 548 ASSERT(!m_document.isEmpty()); |
| 549 v8::Local<v8::Object> documentHandle = m_document.newLocal(m_isolate); |
| 550 checkDocumentWrapper(documentHandle, document); |
| 551 documentHandle->Delete(m_isolate->GetCurrentContext(), v8String(m_isolate, n
ame)); |
| 552 } |
| 553 |
481 void WindowProxy::updateSecurityOrigin(SecurityOrigin* origin) | 554 void WindowProxy::updateSecurityOrigin(SecurityOrigin* origin) |
482 { | 555 { |
483 if (!isContextInitialized()) | 556 if (!isContextInitialized()) |
484 return; | 557 return; |
485 setSecurityToken(origin); | 558 setSecurityToken(origin); |
486 } | 559 } |
487 | 560 |
488 } // namespace blink | 561 } // namespace blink |
OLD | NEW |