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

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

Issue 311033003: Implementing mixed content for forms posting to insecure location from secure ones (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Adding mixed content to forms submitting to non-secure location from a secure one Created 6 years, 6 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
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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 #if !ENABLE(OILPAN) 65 #if !ENABLE(OILPAN)
66 , m_weakPtrFactory(this) 66 , m_weakPtrFactory(this)
67 #endif 67 #endif
68 , m_associatedElementsAreDirty(false) 68 , m_associatedElementsAreDirty(false)
69 , m_imageElementsAreDirty(false) 69 , m_imageElementsAreDirty(false)
70 , m_hasElementsAssociatedByParser(false) 70 , m_hasElementsAssociatedByParser(false)
71 , m_didFinishParsingChildren(false) 71 , m_didFinishParsingChildren(false)
72 , m_wasUserSubmitted(false) 72 , m_wasUserSubmitted(false)
73 , m_isInResetFunction(false) 73 , m_isInResetFunction(false)
74 , m_wasDemoted(false) 74 , m_wasDemoted(false)
75 , m_insecureSubmissionReported(false)
75 , m_pendingAutocompleteEventsQueue(GenericEventQueue::create(this)) 76 , m_pendingAutocompleteEventsQueue(GenericEventQueue::create(this))
76 { 77 {
77 ScriptWrappable::init(this); 78 ScriptWrappable::init(this);
78 } 79 }
79 80
80 PassRefPtrWillBeRawPtr<HTMLFormElement> HTMLFormElement::create(Document& docume nt) 81 PassRefPtrWillBeRawPtr<HTMLFormElement> HTMLFormElement::create(Document& docume nt)
81 { 82 {
82 UseCounter::count(document, UseCounter::FormElement); 83 UseCounter::count(document, UseCounter::FormElement);
83 return adoptRefWillBeRefCountedGarbageCollected(new HTMLFormElement(document )); 84 return adoptRefWillBeRefCountedGarbageCollected(new HTMLFormElement(document ));
84 } 85 }
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 } 340 }
340 } 341 }
341 342
342 void HTMLFormElement::submit(Event* event, bool activateSubmitButton, bool proce ssingUserGesture, FormSubmissionTrigger formSubmissionTrigger) 343 void HTMLFormElement::submit(Event* event, bool activateSubmitButton, bool proce ssingUserGesture, FormSubmissionTrigger formSubmissionTrigger)
343 { 344 {
344 FrameView* view = document().view(); 345 FrameView* view = document().view();
345 LocalFrame* frame = document().frame(); 346 LocalFrame* frame = document().frame();
346 if (!view || !frame || !frame->page()) 347 if (!view || !frame || !frame->page())
347 return; 348 return;
348 349
350 // Mixed content with form submission to insecure "action"
351 KURL actionURL = document().completeURL(m_attributes.action().isEmpty() ? do cument().url().string() : m_attributes.action());
jww 2014/06/05 03:49:46 You should probably factor all of this out into a
mhm 2014/06/05 17:04:28 Done.
352 if (!frame->loader().mixedContentChecker()->canDisplayInsecureContent(docume nt().securityOrigin(), actionURL)) {
353 m_insecureSubmissionReported = true;
354 return;
355 }
356
349 m_wasUserSubmitted = processingUserGesture; 357 m_wasUserSubmitted = processingUserGesture;
350 358
351 RefPtrWillBeRawPtr<HTMLFormControlElement> firstSuccessfulSubmitButton = nul lptr; 359 RefPtrWillBeRawPtr<HTMLFormControlElement> firstSuccessfulSubmitButton = nul lptr;
352 bool needButtonActivation = activateSubmitButton; // do we need to activate a submit button? 360 bool needButtonActivation = activateSubmitButton; // do we need to activate a submit button?
353 361
354 const FormAssociatedElement::List& elements = associatedElements(); 362 const FormAssociatedElement::List& elements = associatedElements();
355 for (unsigned i = 0; i < elements.size(); ++i) { 363 for (unsigned i = 0; i < elements.size(); ++i) {
356 FormAssociatedElement* associatedElement = elements[i]; 364 FormAssociatedElement* associatedElement = elements[i];
357 if (!associatedElement->isFormControlElement()) 365 if (!associatedElement->isFormControlElement())
358 continue; 366 continue;
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 bool HTMLFormElement::shouldAutocomplete() const 748 bool HTMLFormElement::shouldAutocomplete() const
741 { 749 {
742 return !equalIgnoringCase(fastGetAttribute(autocompleteAttr), "off"); 750 return !equalIgnoringCase(fastGetAttribute(autocompleteAttr), "off");
743 } 751 }
744 752
745 void HTMLFormElement::finishParsingChildren() 753 void HTMLFormElement::finishParsingChildren()
746 { 754 {
747 HTMLElement::finishParsingChildren(); 755 HTMLElement::finishParsingChildren();
748 document().formController().restoreControlStateIn(*this); 756 document().formController().restoreControlStateIn(*this);
749 m_didFinishParsingChildren = true; 757 m_didFinishParsingChildren = true;
758
759 // If the post is pointing to insecure "action" location from a secure page
760 // it is mixed content.
761 KURL actionURL = document().completeURL(m_attributes.action().isEmpty() ? do cument().url().string() : m_attributes.action());
jww 2014/06/05 03:49:46 See comment above about factoring this logic out.
mhm 2014/06/05 17:04:28 Done.
762 if (!m_insecureSubmissionReported && MixedContentChecker::isMixedContent(doc ument().securityOrigin(), actionURL)) {
jww 2014/06/05 03:49:46 Although it's technically not needed, for clarify,
mhm 2014/06/05 17:04:28 Done.
763 document().frame()->loader().mixedContentChecker()->canDisplayInsecureCo ntent(document().securityOrigin(), actionURL);
764 m_insecureSubmissionReported = true;
765 }
750 } 766 }
751 767
752 void HTMLFormElement::copyNonAttributePropertiesFromElement(const Element& sourc e) 768 void HTMLFormElement::copyNonAttributePropertiesFromElement(const Element& sourc e)
753 { 769 {
754 m_wasDemoted = static_cast<const HTMLFormElement&>(source).m_wasDemoted; 770 m_wasDemoted = static_cast<const HTMLFormElement&>(source).m_wasDemoted;
755 HTMLElement::copyNonAttributePropertiesFromElement(source); 771 HTMLElement::copyNonAttributePropertiesFromElement(source);
756 } 772 }
757 773
758 void HTMLFormElement::anonymousNamedGetter(const AtomicString& name, bool& retur nValue0Enabled, RefPtrWillBeRawPtr<RadioNodeList>& returnValue0, bool& returnVal ue1Enabled, RefPtrWillBeRawPtr<Element>& returnValue1) 774 void HTMLFormElement::anonymousNamedGetter(const AtomicString& name, bool& retur nValue0Enabled, RefPtrWillBeRawPtr<RadioNodeList>& returnValue0, bool& returnVal ue1Enabled, RefPtrWillBeRawPtr<Element>& returnValue1)
759 { 775 {
(...skipping 24 matching lines...) Expand all
784 returnValue0 = radioNodeList(name, onlyMatchImg); 800 returnValue0 = radioNodeList(name, onlyMatchImg);
785 } 801 }
786 802
787 void HTMLFormElement::setDemoted(bool demoted) 803 void HTMLFormElement::setDemoted(bool demoted)
788 { 804 {
789 if (demoted) 805 if (demoted)
790 UseCounter::count(document(), UseCounter::DemotedFormElement); 806 UseCounter::count(document(), UseCounter::DemotedFormElement);
791 m_wasDemoted = demoted; 807 m_wasDemoted = demoted;
792 } 808 }
793 809
810 void HTMLFormElement::attributeChanged(const QualifiedName& name, const AtomicSt ring& newValue, AttributeModificationReason)
jww 2014/06/05 03:49:46 Does this get called when the object is initially
mhm 2014/06/05 17:04:28 Done.
mhm 2014/06/05 17:04:28 Yes it does get called :-) Removed redundant code
811 {
812 Element::attributeChanged(name, newValue);
813
814 if (name == actionAttr) {
815 // If the new action attribute is pointing to insecure "action" location from a secure page
816 // it is mixed content.
817 KURL actionURL = document().completeURL(m_attributes.action().isEmpty() ? document().url().string() : m_attributes.action());
jww 2014/06/05 03:49:46 Assuming you don't remove the logic in finishParsi
mhm 2014/06/05 17:04:28 Done.
818 if (!m_insecureSubmissionReported && MixedContentChecker::isMixedContent (document().securityOrigin(), actionURL)) {
819 document().frame()->loader().mixedContentChecker()->canDisplayInsecu reContent(document().securityOrigin(), actionURL);
820 m_insecureSubmissionReported = true;
821 }
822 }
823 }
824
794 } // namespace 825 } // namespace
OLDNEW
« Source/core/html/HTMLFormElement.h ('K') | « Source/core/html/HTMLFormElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698