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

Side by Side Diff: Source/core/html/HTMLFormElement.cpp

Issue 179663002: Remove HTMLFormElement::m_shouldSubmit Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/html/HTMLFormElement.h ('k') | no next file » | 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 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 using namespace HTMLNames; 60 using namespace HTMLNames;
61 61
62 HTMLFormElement::HTMLFormElement(Document& document) 62 HTMLFormElement::HTMLFormElement(Document& document)
63 : HTMLElement(formTag, document) 63 : HTMLElement(formTag, document)
64 , m_weakPtrFactory(this) 64 , m_weakPtrFactory(this)
65 , m_associatedElementsAreDirty(false) 65 , m_associatedElementsAreDirty(false)
66 , m_imageElementsAreDirty(false) 66 , m_imageElementsAreDirty(false)
67 , m_hasElementsAssociatedByParser(false) 67 , m_hasElementsAssociatedByParser(false)
68 , m_didFinishParsingChildren(false) 68 , m_didFinishParsingChildren(false)
69 , m_wasUserSubmitted(false) 69 , m_wasUserSubmitted(false)
70 , m_isSubmittingOrPreparingForSubmission(false) 70 , m_isSubmitting(false)
71 , m_shouldSubmit(false)
72 , m_isInResetFunction(false) 71 , m_isInResetFunction(false)
73 , m_wasDemoted(false) 72 , m_wasDemoted(false)
74 , m_requestAutocompleteTimer(this, &HTMLFormElement::requestAutocompleteTime rFired) 73 , m_requestAutocompleteTimer(this, &HTMLFormElement::requestAutocompleteTime rFired)
75 { 74 {
76 ScriptWrappable::init(this); 75 ScriptWrappable::init(this);
77 } 76 }
78 77
79 PassRefPtr<HTMLFormElement> HTMLFormElement::create(Document& document) 78 PassRefPtr<HTMLFormElement> HTMLFormElement::create(Document& document)
80 { 79 {
81 UseCounter::count(document, UseCounter::FormElement); 80 UseCounter::count(document, UseCounter::FormElement);
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 if (unhandled->isFocusable() && unhandled->inDocument()) 274 if (unhandled->isFocusable() && unhandled->inDocument())
276 continue; 275 continue;
277 String message("An invalid form control with name='%name' is not foc usable."); 276 String message("An invalid form control with name='%name' is not foc usable.");
278 message.replace("%name", unhandledAssociatedElement->name()); 277 message.replace("%name", unhandledAssociatedElement->name());
279 document().addConsoleMessage(RenderingMessageSource, ErrorMessageLev el, message); 278 document().addConsoleMessage(RenderingMessageSource, ErrorMessageLev el, message);
280 } 279 }
281 } 280 }
282 return false; 281 return false;
283 } 282 }
284 283
285 bool HTMLFormElement::prepareForSubmission(Event* event) 284 void HTMLFormElement::prepareForSubmission(Event* event)
286 { 285 {
287 RefPtr<HTMLFormElement> protector(this); 286 RefPtr<HTMLFormElement> protector(this);
288 Frame* frame = document().frame(); 287 Frame* frame = document().frame();
289 if (m_isSubmittingOrPreparingForSubmission || !frame) 288 if (m_isSubmitting || !frame)
290 return m_isSubmittingOrPreparingForSubmission; 289 return;
291
292 m_isSubmittingOrPreparingForSubmission = true;
293 m_shouldSubmit = false;
294 290
295 // Interactive validation must be done before dispatching the submit event. 291 // Interactive validation must be done before dispatching the submit event.
296 if (!validateInteractively(event)) { 292 if (!validateInteractively(event))
297 m_isSubmittingOrPreparingForSubmission = false; 293 return;
298 return false;
299 }
300 294
301 StringPairVector controlNamesAndValues; 295 StringPairVector controlNamesAndValues;
302 getTextFieldValues(controlNamesAndValues); 296 getTextFieldValues(controlNamesAndValues);
303 RefPtr<FormState> formState = FormState::create(this, controlNamesAndValues, &document(), NotSubmittedByJavaScript); 297 RefPtr<FormState> formState = FormState::create(this, controlNamesAndValues, &document(), NotSubmittedByJavaScript);
304 frame->loader().client()->dispatchWillSendSubmitEvent(formState.release()); 298 frame->loader().client()->dispatchWillSendSubmitEvent(formState.release());
305 299
306 if (dispatchEvent(Event::createCancelableBubble(EventTypeNames::submit))) 300 if (!dispatchEvent(Event::createCancelableBubble(EventTypeNames::submit)))
307 m_shouldSubmit = true; 301 return;
308 302
309 m_isSubmittingOrPreparingForSubmission = false; 303 submit(event, true, true, NotSubmittedByJavaScript);
310
311 if (m_shouldSubmit)
312 submit(event, true, true, NotSubmittedByJavaScript);
313
314 return m_shouldSubmit;
315 } 304 }
316 305
317 void HTMLFormElement::submit() 306 void HTMLFormElement::submit()
318 { 307 {
319 submit(0, false, true, NotSubmittedByJavaScript); 308 submit(0, false, true, NotSubmittedByJavaScript);
320 } 309 }
321 310
322 void HTMLFormElement::submitFromJavaScript() 311 void HTMLFormElement::submitFromJavaScript()
323 { 312 {
324 submit(0, false, UserGestureIndicator::processingUserGesture(), SubmittedByJ avaScript); 313 submit(0, false, UserGestureIndicator::processingUserGesture(), SubmittedByJ avaScript);
(...skipping 26 matching lines...) Expand all
351 toHTMLDialogElement(node)->closeDialog(formSubmission->result()); 340 toHTMLDialogElement(node)->closeDialog(formSubmission->result());
352 return; 341 return;
353 } 342 }
354 } 343 }
355 } 344 }
356 345
357 void HTMLFormElement::submit(Event* event, bool activateSubmitButton, bool proce ssingUserGesture, FormSubmissionTrigger formSubmissionTrigger) 346 void HTMLFormElement::submit(Event* event, bool activateSubmitButton, bool proce ssingUserGesture, FormSubmissionTrigger formSubmissionTrigger)
358 { 347 {
359 FrameView* view = document().view(); 348 FrameView* view = document().view();
360 Frame* frame = document().frame(); 349 Frame* frame = document().frame();
361 if (!view || !frame || !frame->page()) 350 if (!view || !frame || !frame->page() || m_isSubmitting)
362 return; 351 return;
363 352
364 if (m_isSubmittingOrPreparingForSubmission) { 353 m_isSubmitting = true;
365 m_shouldSubmit = true;
366 return;
367 }
368
369 m_isSubmittingOrPreparingForSubmission = true;
370 m_wasUserSubmitted = processingUserGesture; 354 m_wasUserSubmitted = processingUserGesture;
371 355
372 RefPtr<HTMLFormControlElement> firstSuccessfulSubmitButton; 356 RefPtr<HTMLFormControlElement> firstSuccessfulSubmitButton;
373 bool needButtonActivation = activateSubmitButton; // do we need to activate a submit button? 357 bool needButtonActivation = activateSubmitButton; // do we need to activate a submit button?
374 358
375 const Vector<FormAssociatedElement*>& elements = associatedElements(); 359 const Vector<FormAssociatedElement*>& elements = associatedElements();
376 for (unsigned i = 0; i < elements.size(); ++i) { 360 for (unsigned i = 0; i < elements.size(); ++i) {
377 FormAssociatedElement* associatedElement = elements[i]; 361 FormAssociatedElement* associatedElement = elements[i];
378 if (!associatedElement->isFormControlElement()) 362 if (!associatedElement->isFormControlElement())
379 continue; 363 continue;
(...skipping 12 matching lines...) Expand all
392 RefPtr<FormSubmission> formSubmission = FormSubmission::create(this, m_attri butes, event, formSubmissionTrigger); 376 RefPtr<FormSubmission> formSubmission = FormSubmission::create(this, m_attri butes, event, formSubmissionTrigger);
393 EventQueueScope scopeForDialogClose; // Delay dispatching 'close' to dialog until done submitting. 377 EventQueueScope scopeForDialogClose; // Delay dispatching 'close' to dialog until done submitting.
394 if (formSubmission->method() == FormSubmission::DialogMethod) 378 if (formSubmission->method() == FormSubmission::DialogMethod)
395 submitDialog(formSubmission.release()); 379 submitDialog(formSubmission.release());
396 else 380 else
397 scheduleFormSubmission(formSubmission.release()); 381 scheduleFormSubmission(formSubmission.release());
398 382
399 if (needButtonActivation && firstSuccessfulSubmitButton) 383 if (needButtonActivation && firstSuccessfulSubmitButton)
400 firstSuccessfulSubmitButton->setActivatedSubmit(false); 384 firstSuccessfulSubmitButton->setActivatedSubmit(false);
401 385
402 m_shouldSubmit = false; 386 m_isSubmitting = false;
403 m_isSubmittingOrPreparingForSubmission = false;
404 } 387 }
405 388
406 void HTMLFormElement::scheduleFormSubmission(PassRefPtr<FormSubmission> submissi on) 389 void HTMLFormElement::scheduleFormSubmission(PassRefPtr<FormSubmission> submissi on)
407 { 390 {
408 ASSERT(submission->method() == FormSubmission::PostMethod || submission->met hod() == FormSubmission::GetMethod); 391 ASSERT(submission->method() == FormSubmission::PostMethod || submission->met hod() == FormSubmission::GetMethod);
409 ASSERT(submission->data()); 392 ASSERT(submission->data());
410 ASSERT(submission->state()); 393 ASSERT(submission->state());
411 if (submission->action().isEmpty()) 394 if (submission->action().isEmpty())
412 return; 395 return;
413 if (document().isSandboxed(SandboxForms)) { 396 if (document().isSandboxed(SandboxForms)) {
(...skipping 10 matching lines...) Expand all
424 } 407 }
425 408
426 Frame* targetFrame = document().frame()->loader().findFrameForNavigation(sub mission->target(), submission->state()->sourceDocument()); 409 Frame* targetFrame = document().frame()->loader().findFrameForNavigation(sub mission->target(), submission->state()->sourceDocument());
427 if (!targetFrame) { 410 if (!targetFrame) {
428 if (!DOMWindow::allowPopUp(document().frame()) && !UserGestureIndicator: :processingUserGesture()) 411 if (!DOMWindow::allowPopUp(document().frame()) && !UserGestureIndicator: :processingUserGesture())
429 return; 412 return;
430 targetFrame = document().frame(); 413 targetFrame = document().frame();
431 } else { 414 } else {
432 submission->clearTarget(); 415 submission->clearTarget();
433 } 416 }
417
434 if (!targetFrame->page()) 418 if (!targetFrame->page())
435 return; 419 return;
436 420
437 submission->setReferrer(Referrer(document().outgoingReferrer(), document().r eferrerPolicy())); 421 submission->setReferrer(Referrer(document().outgoingReferrer(), document().r eferrerPolicy()));
438 submission->setOrigin(document().outgoingOrigin()); 422 submission->setOrigin(document().outgoingOrigin());
439 423
440 targetFrame->navigationScheduler().scheduleFormSubmission(submission); 424 targetFrame->navigationScheduler().scheduleFormSubmission(submission);
441 } 425 }
442 426
443 void HTMLFormElement::reset() 427 void HTMLFormElement::reset()
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
817 } 801 }
818 802
819 void HTMLFormElement::setDemoted(bool demoted) 803 void HTMLFormElement::setDemoted(bool demoted)
820 { 804 {
821 if (demoted) 805 if (demoted)
822 UseCounter::count(document(), UseCounter::DemotedFormElement); 806 UseCounter::count(document(), UseCounter::DemotedFormElement);
823 m_wasDemoted = demoted; 807 m_wasDemoted = demoted;
824 } 808 }
825 809
826 } // namespace 810 } // namespace
OLDNEW
« no previous file with comments | « Source/core/html/HTMLFormElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698