| Index: third_party/WebKit/Source/platform/text/TextBreakIterator.h
 | 
| diff --git a/third_party/WebKit/Source/platform/text/TextBreakIterator.h b/third_party/WebKit/Source/platform/text/TextBreakIterator.h
 | 
| index 7780e9ed2ab838a0c5d9035d86da9606b84cb86f..88b63e5d0e4ddaab69e0175caf3feda533251424 100644
 | 
| --- a/third_party/WebKit/Source/platform/text/TextBreakIterator.h
 | 
| +++ b/third_party/WebKit/Source/platform/text/TextBreakIterator.h
 | 
| @@ -80,17 +80,20 @@ class PLATFORM_EXPORT LazyLineBreakIterator final {
 | 
|    LazyLineBreakIterator()
 | 
|        : iterator_(0),
 | 
|          cached_prior_context_(0),
 | 
| -        cached_prior_context_length_(0) {
 | 
| +        cached_prior_context_length_(0),
 | 
| +        break_type_(LineBreakType::kNormal) {
 | 
|      ResetPriorContext();
 | 
|    }
 | 
|  
 | 
|    LazyLineBreakIterator(String string,
 | 
| -                        const AtomicString& locale = AtomicString())
 | 
| +                        const AtomicString& locale = AtomicString(),
 | 
| +                        LineBreakType break_type = LineBreakType::kNormal)
 | 
|        : string_(string),
 | 
|          locale_(locale),
 | 
|          iterator_(0),
 | 
|          cached_prior_context_(0),
 | 
| -        cached_prior_context_length_(0) {
 | 
| +        cached_prior_context_length_(0),
 | 
| +        break_type_(break_type) {
 | 
|      ResetPriorContext();
 | 
|    }
 | 
|  
 | 
| @@ -150,7 +153,7 @@ class PLATFORM_EXPORT LazyLineBreakIterator final {
 | 
|    // is (or has been) initialized to use the previously stored string as the
 | 
|    // primary breaking context and using previously stored prior context if
 | 
|    // non-empty.
 | 
| -  TextBreakIterator* Get(unsigned prior_context_length) {
 | 
| +  TextBreakIterator* Get(unsigned prior_context_length) const {
 | 
|      DCHECK(prior_context_length <= kPriorContextCapacity);
 | 
|      const UChar* prior_context =
 | 
|          prior_context_length
 | 
| @@ -169,28 +172,32 @@ class PLATFORM_EXPORT LazyLineBreakIterator final {
 | 
|        cached_prior_context_length_ = prior_context_length;
 | 
|      } else if (prior_context != cached_prior_context_ ||
 | 
|                 prior_context_length != cached_prior_context_length_) {
 | 
| -      this->ResetStringAndReleaseIterator(string_, locale_);
 | 
| -      return this->Get(prior_context_length);
 | 
| +      ReleaseIterator();
 | 
| +      return Get(prior_context_length);
 | 
|      }
 | 
|      return iterator_;
 | 
|    }
 | 
|  
 | 
|    void ResetStringAndReleaseIterator(String string,
 | 
|                                       const AtomicString& locale) {
 | 
| -    if (iterator_)
 | 
| -      ReleaseLineBreakIterator(iterator_);
 | 
| -
 | 
|      string_ = string;
 | 
|      locale_ = locale;
 | 
| -    iterator_ = 0;
 | 
| -    cached_prior_context_ = 0;
 | 
| -    cached_prior_context_length_ = 0;
 | 
| +
 | 
| +    ReleaseIterator();
 | 
| +  }
 | 
| +
 | 
| +  void SetLocale(const AtomicString& locale) {
 | 
| +    if (locale == locale_)
 | 
| +      return;
 | 
| +    locale_ = locale;
 | 
| +    ReleaseIterator();
 | 
|    }
 | 
|  
 | 
| -  inline bool IsBreakable(
 | 
| -      int pos,
 | 
| -      int& next_breakable,
 | 
| -      LineBreakType line_break_type = LineBreakType::kNormal) {
 | 
| +  void SetBreakType(LineBreakType break_type) { break_type_ = break_type; }
 | 
| +
 | 
| +  inline bool IsBreakable(int pos,
 | 
| +                          int& next_breakable,
 | 
| +                          LineBreakType line_break_type) const {
 | 
|      if (pos > next_breakable) {
 | 
|        switch (line_break_type) {
 | 
|          case LineBreakType::kBreakAll:
 | 
| @@ -206,18 +213,37 @@ class PLATFORM_EXPORT LazyLineBreakIterator final {
 | 
|      return pos == next_breakable;
 | 
|    }
 | 
|  
 | 
| +  inline bool IsBreakable(int pos, int& next_breakable) const {
 | 
| +    return IsBreakable(pos, next_breakable, break_type_);
 | 
| +  }
 | 
| +
 | 
| +  // Returns the break opportunity at or after |offset|.
 | 
| +  unsigned NextBreakOpportunity(unsigned offset) const;
 | 
| +
 | 
| +  // Returns the break opportunity at or before |offset|.
 | 
| +  unsigned PreviousBreakOpportunity(unsigned offset, unsigned min = 0) const;
 | 
| +
 | 
|   private:
 | 
| -  int NextBreakablePositionIgnoringNBSP(int pos);
 | 
| -  int NextBreakablePositionBreakAll(int pos);
 | 
| -  int NextBreakablePositionKeepAll(int pos);
 | 
| +  void ReleaseIterator() const {
 | 
| +    if (iterator_)
 | 
| +      ReleaseLineBreakIterator(iterator_);
 | 
| +    iterator_ = 0;
 | 
| +    cached_prior_context_ = 0;
 | 
| +    cached_prior_context_length_ = 0;
 | 
| +  }
 | 
| +
 | 
| +  int NextBreakablePositionIgnoringNBSP(int pos) const;
 | 
| +  int NextBreakablePositionBreakAll(int pos) const;
 | 
| +  int NextBreakablePositionKeepAll(int pos) const;
 | 
|  
 | 
|    static const unsigned kPriorContextCapacity = 2;
 | 
|    String string_;
 | 
|    AtomicString locale_;
 | 
| -  TextBreakIterator* iterator_;
 | 
| +  mutable TextBreakIterator* iterator_;
 | 
|    UChar prior_context_[kPriorContextCapacity];
 | 
| -  const UChar* cached_prior_context_;
 | 
| -  unsigned cached_prior_context_length_;
 | 
| +  mutable const UChar* cached_prior_context_;
 | 
| +  mutable unsigned cached_prior_context_length_;
 | 
| +  LineBreakType break_type_;
 | 
|  };
 | 
|  
 | 
|  // Iterates over "extended grapheme clusters", as defined in UAX #29.
 | 
| 
 |