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

Side by Side Diff: third_party/WebKit/Source/web/tests/WebFrameTest.cpp

Issue 1959183002: Multi-Process Find-in-Page. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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) 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 3726 matching lines...) Expand 10 before | Expand all | Expand 10 after
3737 int activeIndex() const { return m_activeIndex; } 3737 int activeIndex() const { return m_activeIndex; }
3738 3738
3739 private: 3739 private:
3740 bool m_findResultsAreReady; 3740 bool m_findResultsAreReady;
3741 int m_count; 3741 int m_count;
3742 int m_activeIndex; 3742 int m_activeIndex;
3743 }; 3743 };
3744 3744
3745 TEST_P(ParameterizedWebFrameTest, FindInPageMatchRects) 3745 TEST_P(ParameterizedWebFrameTest, FindInPageMatchRects)
3746 { 3746 {
3747 registerMockedHttpURLLoad("find_in_page.html");
3748 registerMockedHttpURLLoad("find_in_page_frame.html"); 3747 registerMockedHttpURLLoad("find_in_page_frame.html");
3749 3748
3750 FindUpdateWebFrameClient client; 3749 FindUpdateWebFrameClient client;
3751 FrameTestHelpers::WebViewHelper webViewHelper(this); 3750 FrameTestHelpers::WebViewHelper webViewHelper(this);
3752 webViewHelper.initializeAndLoad(m_baseURL + "find_in_page.html", true, &clie nt); 3751 webViewHelper.initializeAndLoad(m_baseURL + "find_in_page_frame.html", true, &client);
3753 webViewHelper.resize(WebSize(640, 480)); 3752 webViewHelper.resize(WebSize(640, 480));
3754 webViewHelper.webView()->setMaximumLegibleScale(1.f); 3753 webViewHelper.webView()->setMaximumLegibleScale(1.f);
3755 webViewHelper.webView()->updateAllLifecyclePhases(); 3754 webViewHelper.webView()->updateAllLifecyclePhases();
3756 runPendingTasks(); 3755 runPendingTasks();
3757 3756
3758 // Note that the 'result 19' in the <select> element is not expected to prod uce a match. 3757 // Note that the 'result 19' in the <select> element is not expected to
3758 // produce a match. Also, results 00 and 01 are in a different frame that is
3759 // not included in this test.
3759 const char kFindString[] = "result"; 3760 const char kFindString[] = "result";
3760 const int kFindIdentifier = 12345; 3761 const int kFindIdentifier = 12345;
3761 const int kNumResults = 19; 3762 const int kNumResults = 17;
3762 3763
3763 WebFindOptions options; 3764 WebFindOptions options;
3764 WebString searchText = WebString::fromUTF8(kFindString); 3765 WebString searchText = WebString::fromUTF8(kFindString);
3765 WebLocalFrameImpl* mainFrame = toWebLocalFrameImpl(webViewHelper.webView()-> mainFrame()); 3766 WebLocalFrameImpl* mainFrame = toWebLocalFrameImpl(webViewHelper.webView()-> mainFrame());
3766 EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0)) ; 3767 EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0)) ;
3767 3768
3768 mainFrame->resetMatchCount(); 3769 mainFrame->resetMatchCount();
3769 3770
3770 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) 3771 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false))
3771 frame->toWebLocalFrame()->scopeStringMatches(kFindIdentifier, searchText , options, true); 3772 frame->toWebLocalFrame()->scopeStringMatches(kFindIdentifier, searchText , options, true);
3772 3773
3773 runPendingTasks(); 3774 runPendingTasks();
3774 EXPECT_TRUE(client.findResultsAreReady()); 3775 EXPECT_TRUE(client.findResultsAreReady());
3775 3776
3776 WebVector<WebFloatRect> webMatchRects; 3777 WebVector<WebFloatRect> webMatchRects;
3777 mainFrame->findMatchRects(webMatchRects); 3778 mainFrame->findMatchRects(webMatchRects);
3778 ASSERT_EQ(webMatchRects.size(), static_cast<size_t>(kNumResults)); 3779 ASSERT_EQ(static_cast<size_t>(kNumResults), webMatchRects.size());
3779 int rectsVersion = mainFrame->findMatchMarkersVersion(); 3780 int rectsVersion = mainFrame->findMatchMarkersVersion();
3780 3781
3781 for (int resultIndex = 0; resultIndex < kNumResults; ++resultIndex) { 3782 for (int resultIndex = 0; resultIndex < kNumResults; ++resultIndex) {
3782 FloatRect resultRect = static_cast<FloatRect>(webMatchRects[resultIndex] ); 3783 FloatRect resultRect = static_cast<FloatRect>(webMatchRects[resultIndex] );
3783 3784
3784 // Select the match by the center of its rect. 3785 // Select the match by the center of its rect.
3785 EXPECT_EQ(mainFrame->selectNearestFindMatch(resultRect.center(), 0), res ultIndex + 1); 3786 EXPECT_EQ(mainFrame->selectNearestFindMatch(resultRect.center(), 0), res ultIndex + 1);
3786 3787
3787 // Check that the find result ordering matches with our expectations. 3788 // Check that the find result ordering matches with our expectations.
3788 Range* result = mainFrame->textFinder()->activeMatchFrame()->textFinder( )->activeMatch(); 3789 Range* result = mainFrame->textFinder()->activeMatch();
3789 ASSERT_TRUE(result); 3790 ASSERT_TRUE(result);
3790 result->setEnd(result->endContainer(), result->endOffset() + 3); 3791 result->setEnd(result->endContainer(), result->endOffset() + 3);
3791 EXPECT_EQ(result->text(), String::format("%s %02d", kFindString, resultI ndex)); 3792 EXPECT_EQ(result->text(), String::format("%s %02d", kFindString, resultI ndex + 2));
3792 3793
3793 // Verify that the expected match rect also matches the currently active match. 3794 // Verify that the expected match rect also matches the currently active match.
3794 // Compare the enclosing rects to prevent precision issues caused by CSS transforms. 3795 // Compare the enclosing rects to prevent precision issues caused by CSS transforms.
3795 FloatRect activeMatch = mainFrame->activeFindMatchRect(); 3796 FloatRect activeMatch = mainFrame->activeFindMatchRect();
3796 EXPECT_EQ(enclosingIntRect(activeMatch), enclosingIntRect(resultRect)); 3797 EXPECT_EQ(enclosingIntRect(activeMatch), enclosingIntRect(resultRect));
3797 3798
3798 // The rects version should not have changed. 3799 // The rects version should not have changed.
3799 EXPECT_EQ(mainFrame->findMatchMarkersVersion(), rectsVersion); 3800 EXPECT_EQ(mainFrame->findMatchMarkersVersion(), rectsVersion);
3800 } 3801 }
3801 3802
lfg 2016/05/13 20:15:40 Any reason we can't assert that the rects are in s
paulmeyer 2016/05/16 15:25:11 We could still assert the positions of the rects i
lfg 2016/05/16 16:03:29 Acknowledged.
3802 // All results after the first two ones should be below between them in find -in-page coordinates.
3803 // This is because results 2 to 9 are inside an iframe located between resul ts 0 and 1. This applies to the fixed div too.
3804 EXPECT_TRUE(webMatchRects[0].y < webMatchRects[1].y);
3805 for (int resultIndex = 2; resultIndex < kNumResults; ++resultIndex) {
3806 EXPECT_TRUE(webMatchRects[0].y < webMatchRects[resultIndex].y);
3807 EXPECT_TRUE(webMatchRects[1].y > webMatchRects[resultIndex].y);
3808 }
3809
3810 // Result 3 should be below both 2 and 4. This is caused by the CSS transfor m in the containing div.
3811 // If the transform doesn't work then 3 will be between 2 and 4.
3812 EXPECT_TRUE(webMatchRects[3].y > webMatchRects[2].y);
3813 EXPECT_TRUE(webMatchRects[3].y > webMatchRects[4].y);
3814
3815 // Results 6, 7, 8 and 9 should be one below the other in that same order.
3816 // If overflow:scroll is not properly handled then result 8 would be below r esult 9 or
3817 // result 7 above result 6 depending on the scroll.
3818 EXPECT_TRUE(webMatchRects[6].y < webMatchRects[7].y);
3819 EXPECT_TRUE(webMatchRects[7].y < webMatchRects[8].y);
3820 EXPECT_TRUE(webMatchRects[8].y < webMatchRects[9].y);
3821
3822 // Results 11, 12, 13 and 14 should be between results 10 and 15, as they ar e inside the table.
3823 EXPECT_TRUE(webMatchRects[11].y > webMatchRects[10].y);
3824 EXPECT_TRUE(webMatchRects[12].y > webMatchRects[10].y);
3825 EXPECT_TRUE(webMatchRects[13].y > webMatchRects[10].y);
3826 EXPECT_TRUE(webMatchRects[14].y > webMatchRects[10].y);
3827 EXPECT_TRUE(webMatchRects[11].y < webMatchRects[15].y);
3828 EXPECT_TRUE(webMatchRects[12].y < webMatchRects[15].y);
3829 EXPECT_TRUE(webMatchRects[13].y < webMatchRects[15].y);
3830 EXPECT_TRUE(webMatchRects[14].y < webMatchRects[15].y);
3831
3832 // Result 11 should be above 12, 13 and 14 as it's in the table header.
3833 EXPECT_TRUE(webMatchRects[11].y < webMatchRects[12].y);
3834 EXPECT_TRUE(webMatchRects[11].y < webMatchRects[13].y);
3835 EXPECT_TRUE(webMatchRects[11].y < webMatchRects[14].y);
3836
3837 // Result 11 should also be right to 12, 13 and 14 because of the colspan.
3838 EXPECT_TRUE(webMatchRects[11].x > webMatchRects[12].x);
3839 EXPECT_TRUE(webMatchRects[11].x > webMatchRects[13].x);
3840 EXPECT_TRUE(webMatchRects[11].x > webMatchRects[14].x);
3841
3842 // Result 12 should be left to results 11, 13 and 14 in the table layout.
3843 EXPECT_TRUE(webMatchRects[12].x < webMatchRects[11].x);
3844 EXPECT_TRUE(webMatchRects[12].x < webMatchRects[13].x);
3845 EXPECT_TRUE(webMatchRects[12].x < webMatchRects[14].x);
3846
3847 // Results 13, 12 and 14 should be one above the other in that order because of the rowspan
3848 // and vertical-align: middle by default.
3849 EXPECT_TRUE(webMatchRects[13].y < webMatchRects[12].y);
3850 EXPECT_TRUE(webMatchRects[12].y < webMatchRects[14].y);
3851
3852 // Result 16 should be below result 15.
3853 EXPECT_TRUE(webMatchRects[15].y > webMatchRects[14].y);
3854
3855 // Result 18 should be normalized with respect to the position:relative div, and not it's
3856 // immediate containing div. Consequently, result 18 should be above result 17.
3857 EXPECT_TRUE(webMatchRects[17].y > webMatchRects[18].y);
3858
3859 // Resizing should update the rects version. 3803 // Resizing should update the rects version.
3860 webViewHelper.resize(WebSize(800, 600)); 3804 webViewHelper.resize(WebSize(800, 600));
3861 runPendingTasks(); 3805 runPendingTasks();
3862 EXPECT_TRUE(mainFrame->findMatchMarkersVersion() != rectsVersion); 3806 EXPECT_TRUE(mainFrame->findMatchMarkersVersion() != rectsVersion);
3863 } 3807 }
3864 3808
3865 TEST_F(WebFrameTest, FindInPageActiveIndex) 3809 TEST_F(WebFrameTest, FindInPageActiveIndex)
3866 { 3810 {
3867 registerMockedHttpURLLoad("find_match_count.html"); 3811 registerMockedHttpURLLoad("find_match_count.html");
3868 3812
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
3902 EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchTextNew, options, false, 0)); 3846 EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchTextNew, options, false, 0));
3903 mainFrame->resetMatchCount(); 3847 mainFrame->resetMatchCount();
3904 3848
3905 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) 3849 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false))
3906 frame->toWebLocalFrame()->scopeStringMatches(kFindIdentifier, searchText New, options, true); 3850 frame->toWebLocalFrame()->scopeStringMatches(kFindIdentifier, searchText New, options, true);
3907 3851
3908 runPendingTasks(); 3852 runPendingTasks();
3909 EXPECT_TRUE(client.findResultsAreReady()); 3853 EXPECT_TRUE(client.findResultsAreReady());
3910 EXPECT_EQ(kActiveIndex, client.activeIndex()); 3854 EXPECT_EQ(kActiveIndex, client.activeIndex());
3911 } 3855 }
3912 3856
lfg 2016/05/13 20:15:40 Can we remove find_in_hidden_frame.html from Sourc
paulmeyer 2016/05/16 15:25:12 Yes. Done.
3913 TEST_P(ParameterizedWebFrameTest, FindInPageSkipsHiddenFrames)
3914 {
3915 registerMockedHttpURLLoad("find_in_hidden_frame.html");
3916
3917 FindUpdateWebFrameClient client;
3918 FrameTestHelpers::WebViewHelper webViewHelper(this);
3919 webViewHelper.initializeAndLoad(m_baseURL + "find_in_hidden_frame.html", tru e, &client);
3920 webViewHelper.resize(WebSize(640, 480));
3921 runPendingTasks();
3922
3923 const char kFindString[] = "hello";
3924 const int kFindIdentifier = 12345;
3925 const int kNumResults = 1;
3926
3927 WebFindOptions options;
3928 WebString searchText = WebString::fromUTF8(kFindString);
3929 WebLocalFrameImpl* mainFrame = toWebLocalFrameImpl(webViewHelper.webView()-> mainFrame());
3930 EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0)) ;
3931
3932 mainFrame->resetMatchCount();
3933
3934 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false))
3935 frame->toWebLocalFrame()->scopeStringMatches(kFindIdentifier, searchText , options, true);
3936
3937 runPendingTasks();
3938 EXPECT_TRUE(client.findResultsAreReady());
3939 EXPECT_EQ(kNumResults, client.count());
3940 }
3941
3942 TEST_P(ParameterizedWebFrameTest, FindOnDetachedFrame) 3857 TEST_P(ParameterizedWebFrameTest, FindOnDetachedFrame)
3943 { 3858 {
3944 registerMockedHttpURLLoad("find_in_page.html"); 3859 registerMockedHttpURLLoad("find_in_page.html");
3945 registerMockedHttpURLLoad("find_in_page_frame.html"); 3860 registerMockedHttpURLLoad("find_in_page_frame.html");
3946 3861
3947 FindUpdateWebFrameClient client; 3862 FindUpdateWebFrameClient client;
3948 FrameTestHelpers::WebViewHelper webViewHelper(this); 3863 FrameTestHelpers::WebViewHelper webViewHelper(this);
3949 webViewHelper.initializeAndLoad(m_baseURL + "find_in_page.html", true, &clie nt); 3864 webViewHelper.initializeAndLoad(m_baseURL + "find_in_page.html", true, &clie nt);
3950 webViewHelper.resize(WebSize(640, 480)); 3865 webViewHelper.resize(WebSize(640, 480));
3951 runPendingTasks(); 3866 runPendingTasks();
(...skipping 4730 matching lines...) Expand 10 before | Expand all | Expand 10 after
8682 WebLocalFrame* mainFrame = helper.webView()->mainFrame()->toWebLocalFrame(); 8597 WebLocalFrame* mainFrame = helper.webView()->mainFrame()->toWebLocalFrame();
8683 v8::HandleScope scope(v8::Isolate::GetCurrent()); 8598 v8::HandleScope scope(v8::Isolate::GetCurrent());
8684 mainFrame->executeScript(WebScriptSource("hello = 'world';")); 8599 mainFrame->executeScript(WebScriptSource("hello = 'world';"));
8685 FrameTestHelpers::loadFrame(mainFrame, "data:text/html,new page"); 8600 FrameTestHelpers::loadFrame(mainFrame, "data:text/html,new page");
8686 v8::Local<v8::Value> result = mainFrame->executeScriptAndReturnValue(WebScri ptSource("hello")); 8601 v8::Local<v8::Value> result = mainFrame->executeScriptAndReturnValue(WebScri ptSource("hello"));
8687 ASSERT_TRUE(result->IsString()); 8602 ASSERT_TRUE(result->IsString());
8688 EXPECT_EQ("world", toCoreString(result->ToString(mainFrame->mainWorldScriptC ontext()).ToLocalChecked())); 8603 EXPECT_EQ("world", toCoreString(result->ToString(mainFrame->mainWorldScriptC ontext()).ToLocalChecked()));
8689 } 8604 }
8690 8605
8691 } // namespace blink 8606 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698