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

Side by Side Diff: WebCore/html/HTMLFormElement.cpp

Issue 3464001: Merge 67240 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/517/
Patch Set: Created 10 years, 3 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
« no previous file with comments | « WebCore/html/HTMLFormElement.h ('k') | WebKit/chromium/src/WebFormElement.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed. 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed.
6 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 6 * (C) 2006 Alexey Proskuryakov (ap@nypop.com)
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 #endif 58 #endif
59 59
60 using namespace std; 60 using namespace std;
61 61
62 namespace WebCore { 62 namespace WebCore {
63 63
64 using namespace HTMLNames; 64 using namespace HTMLNames;
65 65
66 HTMLFormElement::HTMLFormElement(const QualifiedName& tagName, Document* documen t) 66 HTMLFormElement::HTMLFormElement(const QualifiedName& tagName, Document* documen t)
67 : HTMLElement(tagName, document) 67 : HTMLElement(tagName, document)
68 , m_submissionTrigger(NotSubmittedByJavaScript) 68 , m_wasUserSubmitted(false)
69 , m_autocomplete(true) 69 , m_autocomplete(true)
70 , m_insubmit(false) 70 , m_insubmit(false)
71 , m_doingsubmit(false) 71 , m_doingsubmit(false)
72 , m_inreset(false) 72 , m_inreset(false)
73 , m_malformed(false) 73 , m_malformed(false)
74 , m_demoted(false) 74 , m_demoted(false)
75 { 75 {
76 ASSERT(hasTagName(formTag)); 76 ASSERT(hasTagName(formTag));
77 } 77 }
78 78
(...skipping 20 matching lines...) Expand all
99 99
100 bool HTMLFormElement::formWouldHaveSecureSubmission(const String& url) 100 bool HTMLFormElement::formWouldHaveSecureSubmission(const String& url)
101 { 101 {
102 return document()->completeURL(url).protocolIs("https"); 102 return document()->completeURL(url).protocolIs("https");
103 } 103 }
104 104
105 bool HTMLFormElement::rendererIsNeeded(RenderStyle* style) 105 bool HTMLFormElement::rendererIsNeeded(RenderStyle* style)
106 { 106 {
107 if (!isDemoted()) 107 if (!isDemoted())
108 return HTMLElement::rendererIsNeeded(style); 108 return HTMLElement::rendererIsNeeded(style);
109 109
110 Node* node = parentNode(); 110 Node* node = parentNode();
111 RenderObject* parentRenderer = node->renderer(); 111 RenderObject* parentRenderer = node->renderer();
112 bool parentIsTableElementPart = (parentRenderer->isTable() && node->hasTagNa me(tableTag)) 112 bool parentIsTableElementPart = (parentRenderer->isTable() && node->hasTagNa me(tableTag))
113 || (parentRenderer->isTableRow() && node->hasTagName(trTag)) 113 || (parentRenderer->isTableRow() && node->hasTagName(trTag))
114 || (parentRenderer->isTableSection() && node->hasTagName(tbodyTag)) 114 || (parentRenderer->isTableSection() && node->hasTagName(tbodyTag))
115 || (parentRenderer->isTableCol() && node->hasTagName(colTag)) 115 || (parentRenderer->isTableCol() && node->hasTagName(colTag))
116 || (parentRenderer->isTableCell() && node->hasTagName(trTag)); 116 || (parentRenderer->isTableCell() && node->hasTagName(trTag));
117 117
118 if (!parentIsTableElementPart) 118 if (!parentIsTableElementPart)
119 return true; 119 return true;
120 120
121 EDisplay display = style->display(); 121 EDisplay display = style->display();
122 bool formIsTablePart = display == TABLE || display == INLINE_TABLE || displa y == TABLE_ROW_GROUP 122 bool formIsTablePart = display == TABLE || display == INLINE_TABLE || displa y == TABLE_ROW_GROUP
123 || display == TABLE_HEADER_GROUP || display == TABLE_FOOTER_GROUP || dis play == TABLE_ROW 123 || display == TABLE_HEADER_GROUP || display == TABLE_FOOTER_GROUP || dis play == TABLE_ROW
124 || display == TABLE_COLUMN_GROUP || display == TABLE_COLUMN || display = = TABLE_CELL 124 || display == TABLE_COLUMN_GROUP || display == TABLE_COLUMN || display = = TABLE_CELL
125 || display == TABLE_CAPTION; 125 || display == TABLE_CAPTION;
126 126
127 return formIsTablePart; 127 return formIsTablePart;
128 } 128 }
129 129
130 void HTMLFormElement::insertedIntoDocument() 130 void HTMLFormElement::insertedIntoDocument()
131 { 131 {
132 if (document()->isHTMLDocument()) 132 if (document()->isHTMLDocument())
133 static_cast<HTMLDocument*>(document())->addNamedItem(m_name); 133 static_cast<HTMLDocument*>(document())->addNamedItem(m_name);
134 134
135 HTMLElement::insertedIntoDocument(); 135 HTMLElement::insertedIntoDocument();
136 } 136 }
137 137
138 void HTMLFormElement::removedFromDocument() 138 void HTMLFormElement::removedFromDocument()
139 { 139 {
140 if (document()->isHTMLDocument()) 140 if (document()->isHTMLDocument())
141 static_cast<HTMLDocument*>(document())->removeNamedItem(m_name); 141 static_cast<HTMLDocument*>(document())->removeNamedItem(m_name);
142 142
143 HTMLElement::removedFromDocument(); 143 HTMLElement::removedFromDocument();
144 } 144 }
145 145
146 void HTMLFormElement::handleLocalEvents(Event* event) 146 void HTMLFormElement::handleLocalEvents(Event* event)
147 { 147 {
148 Node* targetNode = event->target()->toNode(); 148 Node* targetNode = event->target()->toNode();
149 if (event->eventPhase() != Event::CAPTURING_PHASE && targetNode && targetNod e != this && (event->type() == eventNames().submitEvent || event->type() == even tNames().resetEvent)) { 149 if (event->eventPhase() != Event::CAPTURING_PHASE && targetNode && targetNod e != this && (event->type() == eventNames().submitEvent || event->type() == even tNames().resetEvent)) {
150 event->stopPropagation(); 150 event->stopPropagation();
151 return; 151 return;
152 } 152 }
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 return false; 256 return false;
257 257
258 frame->loader()->client()->dispatchWillSendSubmitEvent(this); 258 frame->loader()->client()->dispatchWillSendSubmitEvent(this);
259 259
260 if (dispatchEvent(Event::create(eventNames().submitEvent, true, true)) && !m _doingsubmit) 260 if (dispatchEvent(Event::create(eventNames().submitEvent, true, true)) && !m _doingsubmit)
261 m_doingsubmit = true; 261 m_doingsubmit = true;
262 262
263 m_insubmit = false; 263 m_insubmit = false;
264 264
265 if (m_doingsubmit) 265 if (m_doingsubmit)
266 submit(event, true, false, NotSubmittedByJavaScript); 266 submit(event, true, true, NotSubmittedByJavaScript);
267 267
268 return m_doingsubmit; 268 return m_doingsubmit;
269 } 269 }
270 270
271 void HTMLFormElement::submit(Frame* javaScriptActiveFrame) 271 void HTMLFormElement::submit(Frame* javaScriptActiveFrame)
272 { 272 {
273 if (javaScriptActiveFrame) 273 if (javaScriptActiveFrame)
274 submit(0, false, !javaScriptActiveFrame->script()->anyPageIsProcessingUs erGesture(), SubmittedByJavaScript); 274 submit(0, false, javaScriptActiveFrame->script()->anyPageIsProcessingUse rGesture(), SubmittedByJavaScript);
275 else 275 else
276 submit(0, false, false, NotSubmittedByJavaScript); 276 submit(0, false, true, NotSubmittedByJavaScript);
277 } 277 }
278 278
279 void HTMLFormElement::submit(Event* event, bool activateSubmitButton, bool lockH istory, FormSubmissionTrigger formSubmissionTrigger) 279 void HTMLFormElement::submit(Event* event, bool activateSubmitButton, bool proce ssingUserGesture, FormSubmissionTrigger formSubmissionTrigger)
280 { 280 {
281 FrameView* view = document()->view(); 281 FrameView* view = document()->view();
282 Frame* frame = document()->frame(); 282 Frame* frame = document()->frame();
283 if (!view || !frame) 283 if (!view || !frame)
284 return; 284 return;
285 285
286 if (m_insubmit) { 286 if (m_insubmit) {
287 m_doingsubmit = true; 287 m_doingsubmit = true;
288 return; 288 return;
289 } 289 }
290 290
291 m_insubmit = true; 291 m_insubmit = true;
292 m_submissionTrigger = formSubmissionTrigger; 292 m_wasUserSubmitted = processingUserGesture;
293 293
294 HTMLFormControlElement* firstSuccessfulSubmitButton = 0; 294 HTMLFormControlElement* firstSuccessfulSubmitButton = 0;
295 bool needButtonActivation = activateSubmitButton; // do we need to activate a submit button? 295 bool needButtonActivation = activateSubmitButton; // do we need to activate a submit button?
296 296
297 for (unsigned i = 0; i < m_associatedElements.size(); ++i) { 297 for (unsigned i = 0; i < m_associatedElements.size(); ++i) {
298 HTMLFormControlElement* control = m_associatedElements[i]; 298 HTMLFormControlElement* control = m_associatedElements[i];
299 if (needButtonActivation) { 299 if (needButtonActivation) {
300 if (control->isActivatedSubmit()) 300 if (control->isActivatedSubmit())
301 needButtonActivation = false; 301 needButtonActivation = false;
302 else if (firstSuccessfulSubmitButton == 0 && control->isSuccessfulSu bmitButton()) 302 else if (firstSuccessfulSubmitButton == 0 && control->isSuccessfulSu bmitButton())
303 firstSuccessfulSubmitButton = control; 303 firstSuccessfulSubmitButton = control;
304 } 304 }
305 } 305 }
306 306
307 if (needButtonActivation && firstSuccessfulSubmitButton) 307 if (needButtonActivation && firstSuccessfulSubmitButton)
308 firstSuccessfulSubmitButton->setActivatedSubmit(true); 308 firstSuccessfulSubmitButton->setActivatedSubmit(true);
309 309
310 frame->loader()->submitForm(FormSubmission::create(this, m_attributes, event , lockHistory, formSubmissionTrigger)); 310 frame->loader()->submitForm(FormSubmission::create(this, m_attributes, event , !processingUserGesture, formSubmissionTrigger));
311 311
312 if (needButtonActivation && firstSuccessfulSubmitButton) 312 if (needButtonActivation && firstSuccessfulSubmitButton)
313 firstSuccessfulSubmitButton->setActivatedSubmit(false); 313 firstSuccessfulSubmitButton->setActivatedSubmit(false);
314 314
315 m_doingsubmit = m_insubmit = false; 315 m_doingsubmit = m_insubmit = false;
316 } 316 }
317 317
318 void HTMLFormElement::reset() 318 void HTMLFormElement::reset()
319 { 319 {
320 Frame* frame = document()->frame(); 320 Frame* frame = document()->frame();
321 if (m_inreset || !frame) 321 if (m_inreset || !frame)
322 return; 322 return;
323 323
324 m_inreset = true; 324 m_inreset = true;
(...skipping 23 matching lines...) Expand all
348 m_attributes.parseEncodingType(attr->value()); 348 m_attributes.parseEncodingType(attr->value());
349 else if (attr->name() == accept_charsetAttr) 349 else if (attr->name() == accept_charsetAttr)
350 // space separated list of charsets the server 350 // space separated list of charsets the server
351 // accepts - see rfc2045 351 // accepts - see rfc2045
352 m_attributes.setAcceptCharset(attr->value()); 352 m_attributes.setAcceptCharset(attr->value());
353 else if (attr->name() == acceptAttr) { 353 else if (attr->name() == acceptAttr) {
354 // ignore this one for the moment... 354 // ignore this one for the moment...
355 } else if (attr->name() == autocompleteAttr) { 355 } else if (attr->name() == autocompleteAttr) {
356 m_autocomplete = !equalIgnoringCase(attr->value(), "off"); 356 m_autocomplete = !equalIgnoringCase(attr->value(), "off");
357 if (!m_autocomplete) 357 if (!m_autocomplete)
358 document()->registerForDocumentActivationCallbacks(this); 358 document()->registerForDocumentActivationCallbacks(this);
359 else 359 else
360 document()->unregisterForDocumentActivationCallbacks(this); 360 document()->unregisterForDocumentActivationCallbacks(this);
361 } else if (attr->name() == onsubmitAttr) 361 } else if (attr->name() == onsubmitAttr)
362 setAttributeEventListener(eventNames().submitEvent, createAttributeEvent Listener(this, attr)); 362 setAttributeEventListener(eventNames().submitEvent, createAttributeEvent Listener(this, attr));
363 else if (attr->name() == onresetAttr) 363 else if (attr->name() == onresetAttr)
364 setAttributeEventListener(eventNames().resetEvent, createAttributeEventL istener(this, attr)); 364 setAttributeEventListener(eventNames().resetEvent, createAttributeEventL istener(this, attr));
365 else if (attr->name() == nameAttr) { 365 else if (attr->name() == nameAttr) {
366 const AtomicString& newName = attr->value(); 366 const AtomicString& newName = attr->value();
367 if (inDocument() && document()->isHTMLDocument()) { 367 if (inDocument() && document()->isHTMLDocument()) {
368 HTMLDocument* document = static_cast<HTMLDocument*>(this->document() ); 368 HTMLDocument* document = static_cast<HTMLDocument*>(this->document() );
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 void HTMLFormElement::setMethod(const String &value) 475 void HTMLFormElement::setMethod(const String &value)
476 { 476 {
477 setAttribute(methodAttr, value); 477 setAttribute(methodAttr, value);
478 } 478 }
479 479
480 String HTMLFormElement::target() const 480 String HTMLFormElement::target() const
481 { 481 {
482 return getAttribute(targetAttr); 482 return getAttribute(targetAttr);
483 } 483 }
484 484
485 FormSubmissionTrigger HTMLFormElement::submissionTrigger() const 485 bool HTMLFormElement::wasUserSubmitted() const
486 { 486 {
487 return m_submissionTrigger; 487 return m_wasUserSubmitted;
488 } 488 }
489 489
490 HTMLFormControlElement* HTMLFormElement::defaultButton() const 490 HTMLFormControlElement* HTMLFormElement::defaultButton() const
491 { 491 {
492 for (unsigned i = 0; i < m_associatedElements.size(); ++i) { 492 for (unsigned i = 0; i < m_associatedElements.size(); ++i) {
493 HTMLFormControlElement* control = m_associatedElements[i]; 493 HTMLFormControlElement* control = m_associatedElements[i];
494 if (control->isSuccessfulSubmitButton()) 494 if (control->isSuccessfulSubmitButton())
495 return control; 495 return control;
496 } 496 }
497 497
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 found = true; 549 found = true;
550 break; 550 break;
551 } 551 }
552 } 552 }
553 if (!found) 553 if (!found)
554 // we have seen it before but it is gone now. still, we need to retu rn it. 554 // we have seen it before but it is gone now. still, we need to retu rn it.
555 namedItems.append(aliasElem.get()); 555 namedItems.append(aliasElem.get());
556 } 556 }
557 // name has been accessed, remember it 557 // name has been accessed, remember it
558 if (namedItems.size() && aliasElem != namedItems.first()) 558 if (namedItems.size() && aliasElem != namedItems.first())
559 addElementAlias(static_cast<HTMLFormControlElement*>(namedItems.first(). get()), name); 559 addElementAlias(static_cast<HTMLFormControlElement*>(namedItems.first(). get()), name);
560 } 560 }
561 561
562 void HTMLFormElement::documentDidBecomeActive() 562 void HTMLFormElement::documentDidBecomeActive()
563 { 563 {
564 ASSERT(!m_autocomplete); 564 ASSERT(!m_autocomplete);
565 565
566 for (unsigned i = 0; i < m_associatedElements.size(); ++i) 566 for (unsigned i = 0; i < m_associatedElements.size(); ++i)
567 m_associatedElements[i]->reset(); 567 m_associatedElements[i]->reset();
568 } 568 }
569 569
570 void HTMLFormElement::willMoveToNewOwnerDocument() 570 void HTMLFormElement::willMoveToNewOwnerDocument()
571 { 571 {
572 if (!m_autocomplete) 572 if (!m_autocomplete)
573 document()->unregisterForDocumentActivationCallbacks(this); 573 document()->unregisterForDocumentActivationCallbacks(this);
574 HTMLElement::willMoveToNewOwnerDocument(); 574 HTMLElement::willMoveToNewOwnerDocument();
575 } 575 }
576 576
577 void HTMLFormElement::didMoveToNewOwnerDocument() 577 void HTMLFormElement::didMoveToNewOwnerDocument()
578 { 578 {
579 if (!m_autocomplete) 579 if (!m_autocomplete)
580 document()->registerForDocumentActivationCallbacks(this); 580 document()->registerForDocumentActivationCallbacks(this);
581 HTMLElement::didMoveToNewOwnerDocument(); 581 HTMLElement::didMoveToNewOwnerDocument();
582 } 582 }
583 583
584 } // namespace 584 } // namespace
OLDNEW
« no previous file with comments | « WebCore/html/HTMLFormElement.h ('k') | WebKit/chromium/src/WebFormElement.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698