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

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

Issue 1280423002: CSS4: Implement :placeholder-shown pseudo class (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Updated testcase Created 5 years, 4 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, 2010 Apple Inc. All rights reserv ed. 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2010 Apple Inc. All rights reserv ed.
6 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) 6 * (C) 2006 Alexey Proskuryakov (ap@nypop.com)
7 * Copyright (C) 2007 Samuel Weinig (sam@webkit.org) 7 * Copyright (C) 2007 Samuel Weinig (sam@webkit.org)
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 if (LocalFrame* frame = document().frame()) 267 if (LocalFrame* frame = document().frame())
268 frame->spellChecker().didBeginEditing(this); 268 frame->spellChecker().didBeginEditing(this);
269 } 269 }
270 270
271 void HTMLTextAreaElement::subtreeHasChanged() 271 void HTMLTextAreaElement::subtreeHasChanged()
272 { 272 {
273 setChangedSinceLastFormControlChangeEvent(true); 273 setChangedSinceLastFormControlChangeEvent(true);
274 m_valueIsUpToDate = false; 274 m_valueIsUpToDate = false;
275 setNeedsValidityCheck(); 275 setNeedsValidityCheck();
276 setAutofilled(false); 276 setAutofilled(false);
277 updatePlaceholderVisibility(false); 277 updatePlaceholderVisibility();
278 278
279 if (!focused()) 279 if (!focused())
280 return; 280 return;
281 281
282 // When typing in a textarea, childrenChanged is not called, so we need to f orce the directionality check. 282 // When typing in a textarea, childrenChanged is not called, so we need to f orce the directionality check.
283 calculateAndAdjustDirectionality(); 283 calculateAndAdjustDirectionality();
284 284
285 ASSERT(document().isActive()); 285 ASSERT(document().isActive());
286 document().frameHost()->chromeClient().didChangeValueInTextField(*this); 286 document().frameHost()->chromeClient().didChangeValueInTextField(*this);
287 } 287 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 325
326 void HTMLTextAreaElement::updateValue() const 326 void HTMLTextAreaElement::updateValue() const
327 { 327 {
328 if (m_valueIsUpToDate) 328 if (m_valueIsUpToDate)
329 return; 329 return;
330 330
331 m_value = innerEditorValue(); 331 m_value = innerEditorValue();
332 const_cast<HTMLTextAreaElement*>(this)->m_valueIsUpToDate = true; 332 const_cast<HTMLTextAreaElement*>(this)->m_valueIsUpToDate = true;
333 const_cast<HTMLTextAreaElement*>(this)->notifyFormStateChanged(); 333 const_cast<HTMLTextAreaElement*>(this)->notifyFormStateChanged();
334 m_isDirty = true; 334 m_isDirty = true;
335 const_cast<HTMLTextAreaElement*>(this)->updatePlaceholderVisibility(false); 335 const_cast<HTMLTextAreaElement*>(this)->updatePlaceholderVisibility();
336 } 336 }
337 337
338 String HTMLTextAreaElement::value() const 338 String HTMLTextAreaElement::value() const
339 { 339 {
340 updateValue(); 340 updateValue();
341 return m_value; 341 return m_value;
342 } 342 }
343 343
344 void HTMLTextAreaElement::setValue(const String& value, TextFieldEventBehavior e ventBehavior) 344 void HTMLTextAreaElement::setValue(const String& value, TextFieldEventBehavior e ventBehavior)
345 { 345 {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 setSelectionRange(endOfString, endOfString, SelectionHasNoDirect ion, NotDispatchSelectEvent, ChangeSelectionIfFocused); 377 setSelectionRange(endOfString, endOfString, SelectionHasNoDirect ion, NotDispatchSelectEvent, ChangeSelectionIfFocused);
378 } 378 }
379 } 379 }
380 return; 380 return;
381 } 381 }
382 382
383 m_value = normalizedValue; 383 m_value = normalizedValue;
384 setInnerEditorValue(m_value); 384 setInnerEditorValue(m_value);
385 if (eventBehavior == DispatchNoEvent) 385 if (eventBehavior == DispatchNoEvent)
386 setLastChangeWasNotUserEdit(); 386 setLastChangeWasNotUserEdit();
387 updatePlaceholderVisibility(false); 387 updatePlaceholderVisibility();
388 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::create( StyleChangeReason::ControlValue)); 388 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::create( StyleChangeReason::ControlValue));
389 m_suggestedValue = String(); 389 m_suggestedValue = String();
390 setNeedsValidityCheck(); 390 setNeedsValidityCheck();
391 if (isFinishedParsingChildren()) { 391 if (isFinishedParsingChildren()) {
392 // Set the caret to the end of the text value except for initialize. 392 // Set the caret to the end of the text value except for initialize.
393 unsigned endOfString = m_value.length(); 393 unsigned endOfString = m_value.length();
394 setSelectionRange(endOfString, endOfString, SelectionHasNoDirection, Not DispatchSelectEvent, ChangeSelectionIfFocused); 394 setSelectionRange(endOfString, endOfString, SelectionHasNoDirection, Not DispatchSelectEvent, ChangeSelectionIfFocused);
395 } 395 }
396 396
397 notifyFormStateChanged(); 397 notifyFormStateChanged();
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 } 492 }
493 493
494 void HTMLTextAreaElement::setSuggestedValue(const String& value) 494 void HTMLTextAreaElement::setSuggestedValue(const String& value)
495 { 495 {
496 m_suggestedValue = value; 496 m_suggestedValue = value;
497 497
498 if (!value.isNull()) 498 if (!value.isNull())
499 setInnerEditorValue(m_suggestedValue); 499 setInnerEditorValue(m_suggestedValue);
500 else 500 else
501 setInnerEditorValue(m_value); 501 setInnerEditorValue(m_value);
502 updatePlaceholderVisibility(false); 502 updatePlaceholderVisibility();
503 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::create( StyleChangeReason::ControlValue)); 503 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::create( StyleChangeReason::ControlValue));
504 } 504 }
505 505
506 String HTMLTextAreaElement::validationMessage() const 506 String HTMLTextAreaElement::validationMessage() const
507 { 507 {
508 if (!willValidate()) 508 if (!willValidate())
509 return String(); 509 return String();
510 510
511 if (customError()) 511 if (customError())
512 return customValidationMessage(); 512 return customValidationMessage();
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 if (placeholderText.isEmpty()) { 611 if (placeholderText.isEmpty()) {
612 if (placeholder) 612 if (placeholder)
613 userAgentShadowRoot()->removeChild(placeholder); 613 userAgentShadowRoot()->removeChild(placeholder);
614 return; 614 return;
615 } 615 }
616 if (!placeholder) { 616 if (!placeholder) {
617 RefPtrWillBeRawPtr<HTMLDivElement> newElement = HTMLDivElement::create(d ocument()); 617 RefPtrWillBeRawPtr<HTMLDivElement> newElement = HTMLDivElement::create(d ocument());
618 placeholder = newElement.get(); 618 placeholder = newElement.get();
619 placeholder->setShadowPseudoId(AtomicString("-webkit-input-placeholder", AtomicString::ConstructFromLiteral)); 619 placeholder->setShadowPseudoId(AtomicString("-webkit-input-placeholder", AtomicString::ConstructFromLiteral));
620 placeholder->setAttribute(idAttr, ShadowElementNames::placeholder()); 620 placeholder->setAttribute(idAttr, ShadowElementNames::placeholder());
621 placeholder->setInlineStyleProperty(CSSPropertyDisplay, isPlaceholderVis ible() ? CSSValueBlock : CSSValueNone, true);
esprehn 2015/08/21 10:18:10 Just call updatePlaceholderVisibility() here, no r
ramya.v 2015/08/25 10:24:45 updatePlaceholderText is called from inside update
621 userAgentShadowRoot()->insertBefore(placeholder, innerEditorElement()->n extSibling()); 622 userAgentShadowRoot()->insertBefore(placeholder, innerEditorElement()->n extSibling());
622 } 623 }
623 placeholder->setTextContent(placeholderText); 624 placeholder->setTextContent(placeholderText);
624 } 625 }
625 626
626 bool HTMLTextAreaElement::isInteractiveContent() const 627 bool HTMLTextAreaElement::isInteractiveContent() const
627 { 628 {
628 return true; 629 return true;
629 } 630 }
630 631
(...skipping 10 matching lines...) Expand all
641 642
642 void HTMLTextAreaElement::copyNonAttributePropertiesFromElement(const Element& s ource) 643 void HTMLTextAreaElement::copyNonAttributePropertiesFromElement(const Element& s ource)
643 { 644 {
644 const HTMLTextAreaElement& sourceElement = static_cast<const HTMLTextAreaEle ment&>(source); 645 const HTMLTextAreaElement& sourceElement = static_cast<const HTMLTextAreaEle ment&>(source);
645 setValueCommon(sourceElement.value(), DispatchNoEvent, SetSeletion); 646 setValueCommon(sourceElement.value(), DispatchNoEvent, SetSeletion);
646 m_isDirty = sourceElement.m_isDirty; 647 m_isDirty = sourceElement.m_isDirty;
647 HTMLTextFormControlElement::copyNonAttributePropertiesFromElement(source); 648 HTMLTextFormControlElement::copyNonAttributePropertiesFromElement(source);
648 } 649 }
649 650
650 } // namespace blink 651 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698