Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(151)

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp

Issue 1837823003: [Binding] Add [OverrideBuiltins] label onto HTMLDocument interface (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
554 void WindowProxy::updateSecurityOrigin(SecurityOrigin* origin) 481 void WindowProxy::updateSecurityOrigin(SecurityOrigin* origin)
555 { 482 {
556 if (!isContextInitialized()) 483 if (!isContextInitialized())
557 return; 484 return;
558 setSecurityToken(origin); 485 setSecurityToken(origin);
559 } 486 }
560 487
561 } // namespace blink 488 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698