示例#1
0
void HTMLKeygenElement::didAddUserAgentShadowRoot(ShadowRoot& root) {
  DEFINE_STATIC_LOCAL(AtomicString, keygenSelectPseudoId,
                      ("-webkit-keygen-select"));

  Vector<String> keys;
  keys.reserveCapacity(2);
  keys.append(
      locale().queryString(WebLocalizedString::KeygenMenuHighGradeKeySize));
  keys.append(
      locale().queryString(WebLocalizedString::KeygenMenuMediumGradeKeySize));

  // Create a select element with one option element for each key size.
  HTMLSelectElement* select = HTMLSelectElement::create(document());
  select->setShadowPseudoId(keygenSelectPseudoId);
  for (const String& key : keys) {
    HTMLOptionElement* option = HTMLOptionElement::create(document());
    option->appendChild(Text::create(document(), key));
    select->appendChild(option);
  }

  root.appendChild(select);
}
JSObject* JSHTMLOptionElementConstructor::construct(ExecState* exec, const List& args)
{
    int exception = 0;
    RefPtr<Element> el(m_doc->createElement("option", exception));
    HTMLOptionElement* opt = 0;
    if (el) {
        opt = static_cast<HTMLOptionElement*>(el.get());
        int sz = args.size();
        RefPtr<Text> text = m_doc->createTextNode("");
        opt->appendChild(text, exception);
        if (exception == 0 && sz > 0)
            text->setData(args[0]->toString(exec), exception);
        if (exception == 0 && sz > 1)
            opt->setValue(args[1]->toString(exec));
        if (exception == 0 && sz > 2)
            opt->setDefaultSelected(args[2]->toBoolean(exec));
        if (exception == 0 && sz > 3)
            opt->setSelected(args[3]->toBoolean(exec));
    }

    setDOMException(exec, exception);
    return static_cast<JSObject*>(toJS(exec, opt));
}