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

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

Issue 224113002: Oilpan: move Range object to the oilpan heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Use STACK_ALLOCATED() + incorporate ager's overview of macros in this area. Created 6 years, 8 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 Apple Inc. All rights reserved. 5 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
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 24 matching lines...) Expand all
35 #include "core/dom/shadow/ShadowRoot.h" 35 #include "core/dom/shadow/ShadowRoot.h"
36 #include "core/editing/FrameSelection.h" 36 #include "core/editing/FrameSelection.h"
37 #include "core/editing/TextIterator.h" 37 #include "core/editing/TextIterator.h"
38 #include "core/events/Event.h" 38 #include "core/events/Event.h"
39 #include "core/frame/LocalFrame.h" 39 #include "core/frame/LocalFrame.h"
40 #include "core/frame/UseCounter.h" 40 #include "core/frame/UseCounter.h"
41 #include "core/html/HTMLBRElement.h" 41 #include "core/html/HTMLBRElement.h"
42 #include "core/html/shadow/ShadowElementNames.h" 42 #include "core/html/shadow/ShadowElementNames.h"
43 #include "core/rendering/RenderBlock.h" 43 #include "core/rendering/RenderBlock.h"
44 #include "core/rendering/RenderTheme.h" 44 #include "core/rendering/RenderTheme.h"
45 #include "platform/heap/Handle.h"
45 #include "wtf/text/StringBuilder.h" 46 #include "wtf/text/StringBuilder.h"
46 47
47 namespace WebCore { 48 namespace WebCore {
48 49
49 using namespace HTMLNames; 50 using namespace HTMLNames;
50 using namespace std; 51 using namespace std;
51 52
52 HTMLTextFormControlElement::HTMLTextFormControlElement(const QualifiedName& tagN ame, Document& doc, HTMLFormElement* form) 53 HTMLTextFormControlElement::HTMLTextFormControlElement(const QualifiedName& tagN ame, Document& doc, HTMLFormElement* form)
53 : HTMLFormControlElementWithState(tagName, doc, form) 54 : HTMLFormControlElementWithState(tagName, doc, form)
54 , m_lastChangeWasUserEdit(false) 55 , m_lastChangeWasUserEdit(false)
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 newSelection.setIsDirectional(direction != SelectionHasNoDirection); 305 newSelection.setIsDirectional(direction != SelectionHasNoDirection);
305 306
306 if (LocalFrame* frame = document().frame()) 307 if (LocalFrame* frame = document().frame())
307 frame->selection().setSelection(newSelection); 308 frame->selection().setSelection(newSelection);
308 } 309 }
309 310
310 VisiblePosition HTMLTextFormControlElement::visiblePositionForIndex(int index) c onst 311 VisiblePosition HTMLTextFormControlElement::visiblePositionForIndex(int index) c onst
311 { 312 {
312 if (index <= 0) 313 if (index <= 0)
313 return VisiblePosition(firstPositionInNode(innerTextElement()), DOWNSTRE AM); 314 return VisiblePosition(firstPositionInNode(innerTextElement()), DOWNSTRE AM);
314 RefPtr<Range> range = Range::create(document()); 315 RefPtrWillBeRawPtr<Range> range = Range::create(document());
315 range->selectNodeContents(innerTextElement(), ASSERT_NO_EXCEPTION); 316 range->selectNodeContents(innerTextElement(), ASSERT_NO_EXCEPTION);
316 CharacterIterator it(range.get()); 317 CharacterIterator it(range.get());
317 it.advance(index - 1); 318 it.advance(index - 1);
318 return VisiblePosition(it.range()->endPosition(), UPSTREAM); 319 return VisiblePosition(it.range()->endPosition(), UPSTREAM);
319 } 320 }
320 321
321 int HTMLTextFormControlElement::indexForVisiblePosition(const VisiblePosition& p os) const 322 int HTMLTextFormControlElement::indexForVisiblePosition(const VisiblePosition& p os) const
322 { 323 {
323 Position indexPosition = pos.deepEquivalent().parentAnchoredEquivalent(); 324 Position indexPosition = pos.deepEquivalent().parentAnchoredEquivalent();
324 if (enclosingTextFormControl(indexPosition) != this) 325 if (enclosingTextFormControl(indexPosition) != this)
325 return 0; 326 return 0;
326 ASSERT(indexPosition.document()); 327 ASSERT(indexPosition.document());
327 RefPtr<Range> range = Range::create(*indexPosition.document()); 328 RefPtrWillBeRawPtr<Range> range = Range::create(*indexPosition.document());
328 range->setStart(innerTextElement(), 0, ASSERT_NO_EXCEPTION); 329 range->setStart(innerTextElement(), 0, ASSERT_NO_EXCEPTION);
329 range->setEnd(indexPosition.containerNode(), indexPosition.offsetInContainer Node(), ASSERT_NO_EXCEPTION); 330 range->setEnd(indexPosition.containerNode(), indexPosition.offsetInContainer Node(), ASSERT_NO_EXCEPTION);
330 return TextIterator::rangeLength(range.get()); 331 return TextIterator::rangeLength(range.get());
331 } 332 }
332 333
333 int HTMLTextFormControlElement::selectionStart() const 334 int HTMLTextFormControlElement::selectionStart() const
334 { 335 {
335 if (!isTextFormControl()) 336 if (!isTextFormControl())
336 return 0; 337 return 0;
337 if (document().focusedElement() != this && hasCachedSelection()) 338 if (document().focusedElement() != this && hasCachedSelection())
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 { 414 {
414 if (node->isTextNode()) { 415 if (node->isTextNode()) {
415 containerNode = node; 416 containerNode = node;
416 offsetInContainer = offset; 417 offsetInContainer = offset;
417 } else { 418 } else {
418 containerNode = node->parentNode(); 419 containerNode = node->parentNode();
419 offsetInContainer = node->nodeIndex() + offset; 420 offsetInContainer = node->nodeIndex() + offset;
420 } 421 }
421 } 422 }
422 423
423 PassRefPtr<Range> HTMLTextFormControlElement::selection() const 424 PassRefPtrWillBeRawPtr<Range> HTMLTextFormControlElement::selection() const
424 { 425 {
425 if (!renderer() || !isTextFormControl() || !hasCachedSelection()) 426 if (!renderer() || !isTextFormControl() || !hasCachedSelection())
426 return nullptr; 427 return nullptr;
427 428
428 int start = m_cachedSelectionStart; 429 int start = m_cachedSelectionStart;
429 int end = m_cachedSelectionEnd; 430 int end = m_cachedSelectionEnd;
430 431
431 ASSERT(start <= end); 432 ASSERT(start <= end);
432 HTMLElement* innerText = innerTextElement(); 433 HTMLElement* innerText = innerTextElement();
433 if (!innerText) 434 if (!innerText)
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 647
647 return "ltr"; 648 return "ltr";
648 } 649 }
649 650
650 HTMLElement* HTMLTextFormControlElement::innerTextElement() const 651 HTMLElement* HTMLTextFormControlElement::innerTextElement() const
651 { 652 {
652 return toHTMLElement(userAgentShadowRoot()->getElementById(ShadowElementName s::innerEditor())); 653 return toHTMLElement(userAgentShadowRoot()->getElementById(ShadowElementName s::innerEditor()));
653 } 654 }
654 655
655 } // namespace Webcore 656 } // namespace Webcore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698