| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 5123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5134 registerMockedHttpURLLoad("spell.html"); | 5134 registerMockedHttpURLLoad("spell.html"); |
| 5135 FrameTestHelpers::WebViewHelper webViewHelper(this); | 5135 FrameTestHelpers::WebViewHelper webViewHelper(this); |
| 5136 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); | 5136 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); |
| 5137 SpellCheckClient spellcheck; | 5137 SpellCheckClient spellcheck; |
| 5138 webViewHelper.webView()->setSpellCheckClient(&spellcheck); | 5138 webViewHelper.webView()->setSpellCheckClient(&spellcheck); |
| 5139 | 5139 |
| 5140 WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); | 5140 WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); |
| 5141 Document* document = frame->frame()->document(); | 5141 Document* document = frame->frame()->document(); |
| 5142 Element* element = document->getElementById("data"); | 5142 Element* element = document->getElementById("data"); |
| 5143 | 5143 |
| 5144 webViewHelper.webView()->settings()->setUnifiedTextCheckerEnabled(true); | |
| 5145 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); | 5144 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); |
| 5146 | 5145 |
| 5147 element->focus(); | 5146 element->focus(); |
| 5148 NonThrowableExceptionState exceptionState; | 5147 NonThrowableExceptionState exceptionState; |
| 5149 document->execCommand("InsertText", false, "_wellcome_.", exceptionState); | 5148 document->execCommand("InsertText", false, "_wellcome_.", exceptionState); |
| 5150 EXPECT_FALSE(exceptionState.hadException()); | 5149 EXPECT_FALSE(exceptionState.hadException()); |
| 5151 | 5150 |
| 5152 const int allTextBeginOffset = 0; | 5151 const int allTextBeginOffset = 0; |
| 5153 const int allTextLength = 11; | 5152 const int allTextLength = 11; |
| 5154 frame->selectRange(WebRange(allTextBeginOffset, allTextLength)); | 5153 frame->selectRange(WebRange(allTextBeginOffset, allTextLength)); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 5166 registerMockedHttpURLLoad("spell.html"); | 5165 registerMockedHttpURLLoad("spell.html"); |
| 5167 FrameTestHelpers::WebViewHelper webViewHelper(this); | 5166 FrameTestHelpers::WebViewHelper webViewHelper(this); |
| 5168 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); | 5167 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); |
| 5169 SpellCheckClient spellcheck; | 5168 SpellCheckClient spellcheck; |
| 5170 webViewHelper.webView()->setSpellCheckClient(&spellcheck); | 5169 webViewHelper.webView()->setSpellCheckClient(&spellcheck); |
| 5171 | 5170 |
| 5172 WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); | 5171 WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); |
| 5173 Document* document = frame->frame()->document(); | 5172 Document* document = frame->frame()->document(); |
| 5174 Element* element = document->getElementById("data"); | 5173 Element* element = document->getElementById("data"); |
| 5175 | 5174 |
| 5176 webViewHelper.webView()->settings()->setUnifiedTextCheckerEnabled(true); | |
| 5177 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); | 5175 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); |
| 5178 | 5176 |
| 5179 element->focus(); | 5177 element->focus(); |
| 5180 NonThrowableExceptionState exceptionState; | 5178 NonThrowableExceptionState exceptionState; |
| 5181 document->execCommand("InsertText", false, "_wellcome_.", exceptionState); | 5179 document->execCommand("InsertText", false, "_wellcome_.", exceptionState); |
| 5182 EXPECT_FALSE(exceptionState.hadException()); | 5180 EXPECT_FALSE(exceptionState.hadException()); |
| 5183 | 5181 |
| 5184 frame->removeSpellingMarkers(); | 5182 frame->removeSpellingMarkers(); |
| 5185 | 5183 |
| 5186 const int allTextBeginOffset = 0; | 5184 const int allTextBeginOffset = 0; |
| 5187 const int allTextLength = 11; | 5185 const int allTextLength = 11; |
| 5188 frame->selectRange(WebRange(allTextBeginOffset, allTextLength)); | 5186 frame->selectRange(WebRange(allTextBeginOffset, allTextLength)); |
| 5189 EphemeralRange selectionRange = frame->frame()->selection().selection().toNo
rmalizedEphemeralRange(); | 5187 EphemeralRange selectionRange = frame->frame()->selection().selection().toNo
rmalizedEphemeralRange(); |
| 5190 | 5188 |
| 5191 EXPECT_EQ(0U, document->markers().markersInRange(selectionRange, DocumentMar
ker::Spelling).size()); | 5189 EXPECT_EQ(0U, document->markers().markersInRange(selectionRange, DocumentMar
ker::Spelling).size()); |
| 5192 } | 5190 } |
| 5193 | 5191 |
| 5194 TEST_P(ParameterizedWebFrameTest, RemoveSpellingMarkersUnderWords) | 5192 TEST_P(ParameterizedWebFrameTest, RemoveSpellingMarkersUnderWords) |
| 5195 { | 5193 { |
| 5196 registerMockedHttpURLLoad("spell.html"); | 5194 registerMockedHttpURLLoad("spell.html"); |
| 5197 FrameTestHelpers::WebViewHelper webViewHelper(this); | 5195 FrameTestHelpers::WebViewHelper webViewHelper(this); |
| 5198 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); | 5196 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); |
| 5199 SpellCheckClient spellcheck; | 5197 SpellCheckClient spellcheck; |
| 5200 webViewHelper.webView()->setSpellCheckClient(&spellcheck); | 5198 webViewHelper.webView()->setSpellCheckClient(&spellcheck); |
| 5201 | 5199 |
| 5202 LocalFrame* frame = webViewHelper.webView()->mainFrameImpl()->frame(); | 5200 LocalFrame* frame = webViewHelper.webView()->mainFrameImpl()->frame(); |
| 5203 Document* document = frame->document(); | 5201 Document* document = frame->document(); |
| 5204 Element* element = document->getElementById("data"); | 5202 Element* element = document->getElementById("data"); |
| 5205 | 5203 |
| 5206 webViewHelper.webView()->settings()->setUnifiedTextCheckerEnabled(true); | |
| 5207 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); | 5204 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); |
| 5208 | 5205 |
| 5209 element->focus(); | 5206 element->focus(); |
| 5210 NonThrowableExceptionState exceptionState; | 5207 NonThrowableExceptionState exceptionState; |
| 5211 document->execCommand("InsertText", false, " wellcome ", exceptionState); | 5208 document->execCommand("InsertText", false, " wellcome ", exceptionState); |
| 5212 EXPECT_FALSE(exceptionState.hadException()); | 5209 EXPECT_FALSE(exceptionState.hadException()); |
| 5213 | 5210 |
| 5214 WebVector<uint32_t> documentMarkers1; | 5211 WebVector<uint32_t> documentMarkers1; |
| 5215 webViewHelper.webView()->spellingMarkers(&documentMarkers1); | 5212 webViewHelper.webView()->spellingMarkers(&documentMarkers1); |
| 5216 EXPECT_EQ(1U, documentMarkers1.size()); | 5213 EXPECT_EQ(1U, documentMarkers1.size()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 5231 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); | 5228 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); |
| 5232 | 5229 |
| 5233 static const uint32_t kHash = 42; | 5230 static const uint32_t kHash = 42; |
| 5234 SpellCheckClient spellcheck(kHash); | 5231 SpellCheckClient spellcheck(kHash); |
| 5235 webViewHelper.webView()->setSpellCheckClient(&spellcheck); | 5232 webViewHelper.webView()->setSpellCheckClient(&spellcheck); |
| 5236 | 5233 |
| 5237 WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); | 5234 WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); |
| 5238 Document* document = frame->frame()->document(); | 5235 Document* document = frame->frame()->document(); |
| 5239 Element* element = document->getElementById("data"); | 5236 Element* element = document->getElementById("data"); |
| 5240 | 5237 |
| 5241 webViewHelper.webView()->settings()->setUnifiedTextCheckerEnabled(true); | |
| 5242 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); | 5238 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); |
| 5243 | 5239 |
| 5244 element->focus(); | 5240 element->focus(); |
| 5245 NonThrowableExceptionState exceptionState; | 5241 NonThrowableExceptionState exceptionState; |
| 5246 document->execCommand("InsertText", false, "wellcome.", exceptionState); | 5242 document->execCommand("InsertText", false, "wellcome.", exceptionState); |
| 5247 EXPECT_FALSE(exceptionState.hadException()); | 5243 EXPECT_FALSE(exceptionState.hadException()); |
| 5248 | 5244 |
| 5249 WebVector<uint32_t> documentMarkers; | 5245 WebVector<uint32_t> documentMarkers; |
| 5250 webViewHelper.webView()->spellingMarkers(&documentMarkers); | 5246 webViewHelper.webView()->spellingMarkers(&documentMarkers); |
| 5251 EXPECT_EQ(1U, documentMarkers.size()); | 5247 EXPECT_EQ(1U, documentMarkers.size()); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5315 FrameTestHelpers::WebViewHelper webViewHelper(this); | 5311 FrameTestHelpers::WebViewHelper webViewHelper(this); |
| 5316 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); | 5312 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); |
| 5317 | 5313 |
| 5318 StubbornSpellCheckClient spellcheck; | 5314 StubbornSpellCheckClient spellcheck; |
| 5319 webViewHelper.webView()->setSpellCheckClient(&spellcheck); | 5315 webViewHelper.webView()->setSpellCheckClient(&spellcheck); |
| 5320 | 5316 |
| 5321 WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); | 5317 WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); |
| 5322 Document* document = frame->frame()->document(); | 5318 Document* document = frame->frame()->document(); |
| 5323 Element* element = document->getElementById("data"); | 5319 Element* element = document->getElementById("data"); |
| 5324 | 5320 |
| 5325 webViewHelper.webView()->settings()->setUnifiedTextCheckerEnabled(true); | |
| 5326 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); | 5321 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); |
| 5327 | 5322 |
| 5328 element->focus(); | 5323 element->focus(); |
| 5329 NonThrowableExceptionState exceptionState; | 5324 NonThrowableExceptionState exceptionState; |
| 5330 document->execCommand("InsertText", false, "wellcome ", exceptionState); | 5325 document->execCommand("InsertText", false, "wellcome ", exceptionState); |
| 5331 EXPECT_FALSE(exceptionState.hadException()); | 5326 EXPECT_FALSE(exceptionState.hadException()); |
| 5332 document->execCommand("InsertText", false, "he", exceptionState); | 5327 document->execCommand("InsertText", false, "he", exceptionState); |
| 5333 EXPECT_FALSE(exceptionState.hadException()); | 5328 EXPECT_FALSE(exceptionState.hadException()); |
| 5334 | 5329 |
| 5335 spellcheck.kick(); | 5330 spellcheck.kick(); |
| 5336 | 5331 |
| 5337 WebVector<uint32_t> documentMarkers; | 5332 WebVector<uint32_t> documentMarkers; |
| 5338 webViewHelper.webView()->spellingMarkers(&documentMarkers); | 5333 webViewHelper.webView()->spellingMarkers(&documentMarkers); |
| 5339 EXPECT_EQ(0U, documentMarkers.size()); | 5334 EXPECT_EQ(0U, documentMarkers.size()); |
| 5340 } | 5335 } |
| 5341 | 5336 |
| 5342 // This test verifies that cancelling spelling request does not cause a | 5337 // This test verifies that cancelling spelling request does not cause a |
| 5343 // write-after-free when there's no spellcheck client set. | 5338 // write-after-free when there's no spellcheck client set. |
| 5344 TEST_P(ParameterizedWebFrameTest, CancelSpellingRequestCrash) | 5339 TEST_P(ParameterizedWebFrameTest, CancelSpellingRequestCrash) |
| 5345 { | 5340 { |
| 5346 registerMockedHttpURLLoad("spell.html"); | 5341 registerMockedHttpURLLoad("spell.html"); |
| 5347 FrameTestHelpers::WebViewHelper webViewHelper(this); | 5342 FrameTestHelpers::WebViewHelper webViewHelper(this); |
| 5348 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); | 5343 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); |
| 5349 webViewHelper.webView()->setSpellCheckClient(0); | 5344 webViewHelper.webView()->setSpellCheckClient(0); |
| 5350 | 5345 |
| 5351 WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); | 5346 WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); |
| 5352 Document* document = frame->frame()->document(); | 5347 Document* document = frame->frame()->document(); |
| 5353 Element* element = document->getElementById("data"); | 5348 Element* element = document->getElementById("data"); |
| 5354 | 5349 |
| 5355 webViewHelper.webView()->settings()->setUnifiedTextCheckerEnabled(true); | |
| 5356 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); | 5350 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); |
| 5357 | 5351 |
| 5358 element->focus(); | 5352 element->focus(); |
| 5359 frame->frame()->editor().replaceSelectionWithText("A", false, false); | 5353 frame->frame()->editor().replaceSelectionWithText("A", false, false); |
| 5360 frame->frame()->spellChecker().cancelCheck(); | 5354 frame->frame()->spellChecker().cancelCheck(); |
| 5361 } | 5355 } |
| 5362 | 5356 |
| 5363 TEST_P(ParameterizedWebFrameTest, SpellcheckResultErasesMarkers) | 5357 TEST_P(ParameterizedWebFrameTest, SpellcheckResultErasesMarkers) |
| 5364 { | 5358 { |
| 5365 registerMockedHttpURLLoad("spell.html"); | 5359 registerMockedHttpURLLoad("spell.html"); |
| 5366 FrameTestHelpers::WebViewHelper webViewHelper(this); | 5360 FrameTestHelpers::WebViewHelper webViewHelper(this); |
| 5367 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); | 5361 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); |
| 5368 | 5362 |
| 5369 StubbornSpellCheckClient spellcheck; | 5363 StubbornSpellCheckClient spellcheck; |
| 5370 webViewHelper.webView()->setSpellCheckClient(&spellcheck); | 5364 webViewHelper.webView()->setSpellCheckClient(&spellcheck); |
| 5371 | 5365 |
| 5372 WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); | 5366 WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); |
| 5373 Document* document = frame->frame()->document(); | 5367 Document* document = frame->frame()->document(); |
| 5374 Element* element = document->getElementById("data"); | 5368 Element* element = document->getElementById("data"); |
| 5375 | 5369 |
| 5376 webViewHelper.webView()->settings()->setUnifiedTextCheckerEnabled(true); | |
| 5377 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); | 5370 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); |
| 5378 | 5371 |
| 5379 element->focus(); | 5372 element->focus(); |
| 5380 NonThrowableExceptionState exceptionState; | 5373 NonThrowableExceptionState exceptionState; |
| 5381 document->execCommand("InsertText", false, "welcome ", exceptionState); | 5374 document->execCommand("InsertText", false, "welcome ", exceptionState); |
| 5382 | 5375 |
| 5383 document->updateStyleAndLayout(); | 5376 document->updateStyleAndLayout(); |
| 5384 | 5377 |
| 5385 EXPECT_FALSE(exceptionState.hadException()); | 5378 EXPECT_FALSE(exceptionState.hadException()); |
| 5386 auto range = EphemeralRange::rangeOfContents(*element); | 5379 auto range = EphemeralRange::rangeOfContents(*element); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 5399 FrameTestHelpers::WebViewHelper webViewHelper(this); | 5392 FrameTestHelpers::WebViewHelper webViewHelper(this); |
| 5400 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); | 5393 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); |
| 5401 | 5394 |
| 5402 StubbornSpellCheckClient spellcheck; | 5395 StubbornSpellCheckClient spellcheck; |
| 5403 webViewHelper.webView()->setSpellCheckClient(&spellcheck); | 5396 webViewHelper.webView()->setSpellCheckClient(&spellcheck); |
| 5404 | 5397 |
| 5405 WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); | 5398 WebLocalFrameImpl* frame = webViewHelper.webView()->mainFrameImpl(); |
| 5406 Document* document = frame->frame()->document(); | 5399 Document* document = frame->frame()->document(); |
| 5407 Element* element = document->getElementById("data"); | 5400 Element* element = document->getElementById("data"); |
| 5408 | 5401 |
| 5409 webViewHelper.webView()->settings()->setUnifiedTextCheckerEnabled(true); | |
| 5410 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); | 5402 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); |
| 5411 | 5403 |
| 5412 element->focus(); | 5404 element->focus(); |
| 5413 NonThrowableExceptionState exceptionState; | 5405 NonThrowableExceptionState exceptionState; |
| 5414 document->execCommand("InsertText", false, "wellcome ", exceptionState); | 5406 document->execCommand("InsertText", false, "wellcome ", exceptionState); |
| 5415 EXPECT_FALSE(exceptionState.hadException()); | 5407 EXPECT_FALSE(exceptionState.hadException()); |
| 5416 | 5408 |
| 5417 spellcheck.kick(); | 5409 spellcheck.kick(); |
| 5418 ASSERT_EQ(1U, document->markers().markers().size()); | 5410 ASSERT_EQ(1U, document->markers().markers().size()); |
| 5419 ASSERT_NE(static_cast<DocumentMarker*>(0), document->markers().markers()[0])
; | 5411 ASSERT_NE(static_cast<DocumentMarker*>(0), document->markers().markers()[0])
; |
| (...skipping 3413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8833 request.setRequestorOrigin(WebSecurityOrigin::createUnique()); | 8825 request.setRequestorOrigin(WebSecurityOrigin::createUnique()); |
| 8834 helper.webView()->mainFrameImpl()->loadRequest(request); | 8826 helper.webView()->mainFrameImpl()->loadRequest(request); |
| 8835 | 8827 |
| 8836 // Normally, the result of the JS url replaces the existing contents on the | 8828 // Normally, the result of the JS url replaces the existing contents on the |
| 8837 // Document. However, if the JS triggers a navigation, the contents should | 8829 // Document. However, if the JS triggers a navigation, the contents should |
| 8838 // not be replaced. | 8830 // not be replaced. |
| 8839 EXPECT_EQ("", toLocalFrame(helper.webView()->page()->mainFrame())->document(
)->documentElement()->innerText()); | 8831 EXPECT_EQ("", toLocalFrame(helper.webView()->page()->mainFrame())->document(
)->documentElement()->innerText()); |
| 8840 } | 8832 } |
| 8841 | 8833 |
| 8842 } // namespace blink | 8834 } // namespace blink |
| OLD | NEW |