Exemple #1
0
void WebKitMutationObserver::observe(Node* node, MutationObserverOptions options, const HashSet<AtomicString>& attributeFilter, ExceptionCode& ec)
{
    if (!node) {
        ec = NOT_FOUND_ERR;
        return;
    }

    if (!validateOptions(options)) {
        // FIXME: Revisit this once the spec specifies the exception type; SYNTAX_ERR may not be appropriate.
        ec = SYNTAX_ERR;
        return;
    }

    MutationObserverRegistration* registration = node->registerMutationObserver(this);
    registration->resetObservation(options, attributeFilter);

    node->document()->addMutationObserverTypes(registration->mutationTypes());
}
Exemple #2
0
void WebKitMutationObserver::observe(Node* node, const Dictionary& optionsDictionary, ExceptionCode& ec)
{
    if (!node) {
        ec = NOT_FOUND_ERR;
        return;
    }

    if (optionsDictionary.isUndefinedOrNull()) {
        ec = TYPE_MISMATCH_ERR;
        return;
    }

    static const struct {
        const char* name;
        MutationObserverOptions value;
    } booleanOptions[] = {
        { "childList", WebKitMutationObserver::ChildList },
        { "attributes", WebKitMutationObserver::Attributes },
        { "characterData", WebKitMutationObserver::CharacterData },
        { "subtree", WebKitMutationObserver::Subtree },
        { "attributeOldValue", WebKitMutationObserver::AttributeOldValue },
        { "characterDataOldValue", WebKitMutationObserver::CharacterDataOldValue }
    };
    MutationObserverOptions options = 0;
    for (unsigned i = 0; i < sizeof(booleanOptions) / sizeof(booleanOptions[0]); ++i) {
        bool value = false;
        if (optionsDictionary.get(booleanOptions[i].name, value) && value)
            options |= booleanOptions[i].value;
    }

    HashSet<AtomicString> attributeFilter;
    if (optionsDictionary.get("attributeFilter", attributeFilter))
        options |= WebKitMutationObserver::AttributeFilter;

    if (!validateOptions(options)) {
        ec = SYNTAX_ERR;
        return;
    }

    MutationObserverRegistration* registration = node->registerMutationObserver(this);
    registration->resetObservation(options, attributeFilter);

    node->document()->addMutationObserverTypes(registration->mutationTypes());
}