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()); }
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()); }