Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <string.h> | 5 #include <string.h> |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/threading/thread_task_runner_handle.h" | 8 #include "base/threading/thread_task_runner_handle.h" |
| 9 #include "chrome/browser/ui/browser.h" | 9 #include "chrome/browser/ui/browser.h" |
| 10 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 10 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 46 | 46 |
| 47 class MockDelegate : public Holder { | 47 class MockDelegate : public Holder { |
| 48 public: | 48 public: |
| 49 MOCK_METHOD2(OnResult, void(bool, bool)); | 49 MOCK_METHOD2(OnResult, void(bool, bool)); |
| 50 | 50 |
| 51 base::Callback<void(bool, bool)> GetDelegate() { | 51 base::Callback<void(bool, bool)> GetDelegate() { |
| 52 return base::Bind(&MockDelegate::OnResult, base::Unretained(this)); | 52 return base::Bind(&MockDelegate::OnResult, base::Unretained(this)); |
| 53 } | 53 } |
| 54 }; | 54 }; |
| 55 | 55 |
| 56 // Wait a bit to make sure there are no extra calls after the last expected | |
| 57 // call. All the expected calls happen within ~1ms on linux release build, | |
| 58 // so 100ms should be pretty safe to catch extra calls. | |
| 59 // If there are no extra calls, changing this doesn't change the test result. | |
| 60 const unsigned kWaitAfterLastCall = 100; | |
|
Lei Zhang
2016/07/21 22:54:26
s/unsigned/int/ ? As it's being used in quitAfter(
wychen
2016/07/22 22:39:53
Converted all to unsigned. Added Ms.
Lei Zhang
2016/07/26 20:56:35
Any reason to favor unsigned? TimeDelta::FromMilli
wychen
2016/07/27 01:41:12
Done
| |
| 61 | |
| 62 // If there are no expected calls, we wait for a while to make sure there are | |
|
Lei Zhang
2016/07/21 22:54:26
s/we/the test/
Sometimes "we" can be unclear as t
wychen
2016/07/22 22:39:53
Done.
| |
| 63 // no calls in this period of time. When there are expected calls, they happen | |
| 64 // within 100ms after content::WaitForLoadStop() on linux release build, and | |
| 65 // 10X safety margin is used. | |
| 66 // If there are no extra calls, changing this doesn't change the test result. | |
| 67 const unsigned kWaitNoExpectedCall = 1000; | |
| 68 | |
| 69 // QuitWhenIdleClosure() would become nop if it is called before | |
|
Lei Zhang
2016/07/21 22:54:26
s/nop/no-op/
wychen
2016/07/22 22:39:53
Done.
| |
| 70 // content::RunMessageLoop(). This timeout should be long enough to make sure | |
| 71 // at least one QuitWhenIdleClosure() is called after RunMessageLoop(). | |
| 72 // All tests are limited by kWaitAfterLastCall or kWaitNoExpectedCall, so | |
|
Lei Zhang
2016/07/21 22:54:26
Refer to variables as |variable_name|
wychen
2016/07/22 22:39:53
Done.
| |
| 73 // making this longer doesn't actually make tests run for longer, unless | |
| 74 // kWaitAfterLastCall or kWaitNoExpectedCall are so small or the test is so | |
| 75 // slow, for example, on Dr. Memory or Android, that QuitWhenIdleClosure() | |
| 76 // is called prematurely. 100X safety margin is used. | |
| 77 const unsigned kDefaultTimeout = 10000; | |
| 78 | |
| 79 void quitAfter(int time_ms) { | |
|
Lei Zhang
2016/07/21 22:54:26
C++ methods have CapitalNames(). Have you been wri
wychen
2016/07/22 22:39:53
Oops.
| |
| 80 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | |
| 81 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), | |
| 82 base::TimeDelta::FromMilliseconds(time_ms)); | |
| 83 } | |
| 84 | |
| 85 void quitSoon() { | |
| 86 quitAfter(kWaitAfterLastCall); | |
| 87 } | |
| 88 | |
| 56 } // namespace | 89 } // namespace |
| 57 | 90 |
| 58 template<const char Option[]> | 91 template<const char Option[]> |
| 59 class DistillablePageUtilsBrowserTestOption : public InProcessBrowserTest { | 92 class DistillablePageUtilsBrowserTestOption : public InProcessBrowserTest { |
| 60 public: | 93 public: |
| 61 void SetUpCommandLine(base::CommandLine* command_line) override { | 94 void SetUpCommandLine(base::CommandLine* command_line) override { |
| 62 command_line->AppendSwitch(switches::kEnableDomDistiller); | 95 command_line->AppendSwitch(switches::kEnableDomDistiller); |
| 63 command_line->AppendSwitchASCII(switches::kReaderModeHeuristics, | 96 command_line->AppendSwitchASCII(switches::kReaderModeHeuristics, |
| 64 Option); | 97 Option); |
| 65 } | 98 } |
| 66 | 99 |
| 67 void SetUpOnMainThread() override { | 100 void SetUpOnMainThread() override { |
| 68 InProcessBrowserTest::SetUpOnMainThread(); | 101 InProcessBrowserTest::SetUpOnMainThread(); |
| 69 ASSERT_TRUE(embedded_test_server()->Start()); | 102 ASSERT_TRUE(embedded_test_server()->Start()); |
| 70 web_contents_ = | 103 web_contents_ = |
| 71 browser()->tab_strip_model()->GetActiveWebContents(); | 104 browser()->tab_strip_model()->GetActiveWebContents(); |
| 72 setDelegate(web_contents_, holder_.GetDelegate()); | 105 setDelegate(web_contents_, holder_.GetDelegate()); |
| 73 } | 106 } |
| 74 | 107 |
| 75 void NavigateAndWait(const char* url) { | 108 void NavigateAndWait(const char* url, unsigned timeout_ms = 0) { |
|
Lei Zhang
2016/07/21 22:54:26
int here as well.
Lei Zhang
2016/07/21 22:54:26
There aren't that many callers. Just fix the calls
wychen
2016/07/22 22:39:53
This is one extra timeout. When not passed, it's n
wychen
2016/07/22 22:39:53
Done.
Lei Zhang
2016/07/23 00:51:24
I still stand by my original statement since there
wychen
2016/07/24 23:50:31
Make sense. Removed the default parameter.
| |
| 76 GURL article_url(url); | 109 GURL article_url(url); |
| 77 if (base::StartsWith(url, "/", base::CompareCase::SENSITIVE)) { | 110 if (base::StartsWith(url, "/", base::CompareCase::SENSITIVE)) { |
| 78 article_url = embedded_test_server()->GetURL(url); | 111 article_url = embedded_test_server()->GetURL(url); |
| 79 } | 112 } |
| 80 | 113 |
| 81 // This blocks until the navigation has completely finished. | 114 // This blocks until the navigation has completely finished. |
| 82 ui_test_utils::NavigateToURL(browser(), article_url); | 115 ui_test_utils::NavigateToURL(browser(), article_url); |
| 83 content::WaitForLoadStop(web_contents_); | 116 content::WaitForLoadStop(web_contents_); |
| 84 | 117 |
| 85 // Wait a bit for the message. | 118 quitAfter(kDefaultTimeout); |
| 86 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 119 if (timeout_ms) { |
| 87 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), | 120 // Local time-out for the tests that don't expect callbacks. |
| 88 base::TimeDelta::FromMilliseconds(100)); | 121 quitAfter(timeout_ms); |
| 122 } | |
| 89 content::RunMessageLoop(); | 123 content::RunMessageLoop(); |
| 90 } | 124 } |
| 91 | 125 |
| 92 MockDelegate holder_; | 126 MockDelegate holder_; |
| 93 content::WebContents* web_contents_; | 127 content::WebContents* web_contents_; |
| 94 }; | 128 }; |
| 95 | 129 |
| 96 | 130 |
| 97 using DistillablePageUtilsBrowserTestAlways = | 131 using DistillablePageUtilsBrowserTestAlways = |
| 98 DistillablePageUtilsBrowserTestOption<kAlwaysTrue>; | 132 DistillablePageUtilsBrowserTestOption<kAlwaysTrue>; |
| 99 | 133 |
| 100 IN_PROC_BROWSER_TEST_F(DistillablePageUtilsBrowserTestAlways, | 134 IN_PROC_BROWSER_TEST_F(DistillablePageUtilsBrowserTestAlways, |
| 101 TestDelegate) { | 135 TestDelegate) { |
| 102 // Run twice to make sure the delegate object is still alive. | |
| 103 for (int i = 0; i < 2; ++i) { | |
| 104 testing::InSequence dummy; | |
| 105 EXPECT_CALL(holder_, OnResult(true, true)).Times(1); | |
| 106 NavigateAndWait(kSimpleArticlePath); | |
| 107 } | |
| 108 for (unsigned i = 0; i < sizeof(kAllPaths) / sizeof(kAllPaths[0]); ++i) { | 136 for (unsigned i = 0; i < sizeof(kAllPaths) / sizeof(kAllPaths[0]); ++i) { |
| 109 testing::InSequence dummy; | 137 testing::InSequence dummy; |
| 110 EXPECT_CALL(holder_, OnResult(true, true)).Times(1); | 138 EXPECT_CALL(holder_, OnResult(true, true)) |
| 139 .WillOnce(testing::InvokeWithoutArgs(quitSoon)); | |
| 111 NavigateAndWait(kAllPaths[i]); | 140 NavigateAndWait(kAllPaths[i]); |
| 112 } | 141 } |
| 113 // Test pages that we don't care about its distillability. | 142 // Test pages that we don't care about its distillability. |
| 114 { | 143 { |
| 115 testing::InSequence dummy; | 144 testing::InSequence dummy; |
| 116 EXPECT_CALL(holder_, OnResult(_, _)).Times(0); | 145 EXPECT_CALL(holder_, OnResult(_, _)).Times(0); |
| 117 NavigateAndWait("about:blank"); | 146 NavigateAndWait("about:blank", kWaitNoExpectedCall); |
| 118 } | 147 } |
| 119 } | 148 } |
| 120 | 149 |
| 121 | 150 |
| 122 using DistillablePageUtilsBrowserTestNone = | 151 using DistillablePageUtilsBrowserTestNone = |
| 123 DistillablePageUtilsBrowserTestOption<kNone>; | 152 DistillablePageUtilsBrowserTestOption<kNone>; |
| 124 | 153 |
| 125 IN_PROC_BROWSER_TEST_F(DistillablePageUtilsBrowserTestNone, | 154 IN_PROC_BROWSER_TEST_F(DistillablePageUtilsBrowserTestNone, |
| 126 TestDelegate) { | 155 TestDelegate) { |
| 127 EXPECT_CALL(holder_, OnResult(_, _)).Times(0); | 156 EXPECT_CALL(holder_, OnResult(_, _)).Times(0); |
| 128 NavigateAndWait(kSimpleArticlePath); | 157 NavigateAndWait(kSimpleArticlePath, kWaitNoExpectedCall); |
| 129 } | 158 } |
| 130 | 159 |
| 131 | 160 |
| 132 using DistillablePageUtilsBrowserTestOG = | 161 using DistillablePageUtilsBrowserTestOG = |
| 133 DistillablePageUtilsBrowserTestOption<kOGArticle>; | 162 DistillablePageUtilsBrowserTestOption<kOGArticle>; |
| 134 | 163 |
| 135 IN_PROC_BROWSER_TEST_F(DistillablePageUtilsBrowserTestOG, | 164 IN_PROC_BROWSER_TEST_F(DistillablePageUtilsBrowserTestOG, |
| 136 TestDelegate) { | 165 TestDelegate) { |
| 137 { | 166 { |
| 138 testing::InSequence dummy; | 167 testing::InSequence dummy; |
| 139 EXPECT_CALL(holder_, OnResult(true, true)).Times(1); | 168 EXPECT_CALL(holder_, OnResult(true, true)) |
| 169 .WillOnce(testing::InvokeWithoutArgs(quitSoon)); | |
| 140 NavigateAndWait(kArticlePath); | 170 NavigateAndWait(kArticlePath); |
| 141 } | 171 } |
| 142 { | 172 { |
| 143 testing::InSequence dummy; | 173 testing::InSequence dummy; |
| 144 EXPECT_CALL(holder_, OnResult(false, true)).Times(1); | 174 EXPECT_CALL(holder_, OnResult(false, true)) |
| 175 .WillOnce(testing::InvokeWithoutArgs(quitSoon)); | |
| 145 NavigateAndWait(kNonArticlePath); | 176 NavigateAndWait(kNonArticlePath); |
| 146 } | 177 } |
| 147 } | 178 } |
| 148 | 179 |
| 149 | 180 |
| 150 using DistillablePageUtilsBrowserTestAdaboost = | 181 using DistillablePageUtilsBrowserTestAdaboost = |
| 151 DistillablePageUtilsBrowserTestOption<kAdaBoost>; | 182 DistillablePageUtilsBrowserTestOption<kAdaBoost>; |
| 152 | 183 |
| 153 IN_PROC_BROWSER_TEST_F(DistillablePageUtilsBrowserTestAdaboost, | 184 IN_PROC_BROWSER_TEST_F(DistillablePageUtilsBrowserTestAdaboost, |
| 154 TestDelegate) { | 185 TestDelegate) { |
| 155 const char* paths[] = {kSimpleArticlePath, kSimpleArticleIFramePath}; | 186 const char* paths[] = {kSimpleArticlePath, kSimpleArticleIFramePath}; |
| 156 for (unsigned i = 0; i < sizeof(paths)/sizeof(paths[0]); ++i) { | 187 for (unsigned i = 0; i < sizeof(paths)/sizeof(paths[0]); ++i) { |
| 157 testing::InSequence dummy; | 188 testing::InSequence dummy; |
| 158 EXPECT_CALL(holder_, OnResult(true, false)).Times(1); | 189 EXPECT_CALL(holder_, OnResult(true, false)).Times(1); |
| 159 EXPECT_CALL(holder_, OnResult(true, true)).Times(1); | 190 EXPECT_CALL(holder_, OnResult(true, true)) |
| 191 .WillOnce(testing::InvokeWithoutArgs(quitSoon)); | |
| 160 NavigateAndWait(paths[i]); | 192 NavigateAndWait(paths[i]); |
| 161 } | 193 } |
| 162 { | 194 { |
| 163 testing::InSequence dummy; | 195 testing::InSequence dummy; |
| 164 EXPECT_CALL(holder_, OnResult(false, false)).Times(1); | 196 EXPECT_CALL(holder_, OnResult(false, false)).Times(1); |
| 165 EXPECT_CALL(holder_, OnResult(false, true)).Times(1); | 197 EXPECT_CALL(holder_, OnResult(false, true)) |
| 198 .WillOnce(testing::InvokeWithoutArgs(quitSoon)); | |
| 166 NavigateAndWait(kNonArticlePath); | 199 NavigateAndWait(kNonArticlePath); |
| 167 } | 200 } |
| 168 } | 201 } |
| 169 | 202 |
| 170 } // namespace dom_distiller | 203 } // namespace dom_distiller |
| OLD | NEW |