Esempio n. 1
0
PassRefPtr<ShadowRoot> ShadowRoot::create(Element* element, ShadowRootType type, ExceptionCode& ec)
{
    if (!element) {
        ec = HIERARCHY_REQUEST_ERR;
        return 0;
    }

    // Since some elements recreates shadow root dynamically, multiple shadow subtrees won't work well in that element.
    // Until they are fixed, we disable adding author shadow root for them.
    if (type == AuthorShadowRoot && !allowsAuthorShadowRoot(element)) {
        ec = HIERARCHY_REQUEST_ERR;
        return 0;
    }

    RefPtr<ShadowRoot> shadowRoot = adoptRef(new ShadowRoot(element->document()));
    shadowRoot->setType(type);

    ec = 0;
    element->ensureShadow()->addShadowRoot(element, shadowRoot, type, ec);
    if (ec)
        return 0;
    ASSERT(element == shadowRoot->host());
    ASSERT(element->shadow());
    return shadowRoot.release();
}
Esempio n. 2
0
PassRefPtr<ShadowRoot> ShadowRoot::create(Element* element, ShadowRootCreationPurpose purpose, ExceptionCode& ec)
{
#if ENABLE(SHADOW_DOM)
    bool isMultipleShadowSubtreesEnabled = RuntimeEnabledFeatures::multipleShadowSubtreesEnabled();
#else
    bool isMultipleShadowSubtreesEnabled = false;
#endif

    if (!element || (!isMultipleShadowSubtreesEnabled && element->hasShadowRoot())) {
        ec = HIERARCHY_REQUEST_ERR;
        return 0;
    }

    // Since some elements recreates shadow root dynamically, multiple shadow subtrees won't work well in that element.
    // Until they are fixed, we disable adding author shadow root for them.
    if (purpose == CreatingAuthorShadowRoot && !allowsAuthorShadowRoot(element)) {
        ec = HIERARCHY_REQUEST_ERR;
        return 0;
    }

    ASSERT(purpose != CreatingUserAgentShadowRoot || !element->hasShadowRoot());
    RefPtr<ShadowRoot> shadowRoot = adoptRef(new ShadowRoot(element->document()));

    ec = 0;
    element->ensureShadowTree()->addShadowRoot(element, shadowRoot, ec);
    if (ec)
        return 0;
    ASSERT(element == shadowRoot->host());
    ASSERT(element->hasShadowRoot());
    return shadowRoot.release();
}