| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/bind_helpers.h" | 6 #include "base/bind_helpers.h" |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/memory/scoped_vector.h" | 8 #include "base/memory/scoped_vector.h" |
| 9 #include "base/run_loop.h" |
| 9 #include "base/synchronization/waitable_event.h" | 10 #include "base/synchronization/waitable_event.h" |
| 10 #include "components/navigation_interception/intercept_navigation_resource_throt
tle.h" | 11 #include "components/navigation_interception/intercept_navigation_resource_throt
tle.h" |
| 11 #include "components/navigation_interception/navigation_params.h" | 12 #include "components/navigation_interception/navigation_params.h" |
| 13 #include "content/public/browser/browser_thread.h" |
| 12 #include "content/public/browser/render_process_host.h" | 14 #include "content/public/browser/render_process_host.h" |
| 13 #include "content/public/browser/resource_context.h" | 15 #include "content/public/browser/resource_context.h" |
| 14 #include "content/public/browser/resource_controller.h" | 16 #include "content/public/browser/resource_controller.h" |
| 15 #include "content/public/browser/resource_dispatcher_host.h" | 17 #include "content/public/browser/resource_dispatcher_host.h" |
| 16 #include "content/public/browser/resource_dispatcher_host_delegate.h" | 18 #include "content/public/browser/resource_dispatcher_host_delegate.h" |
| 17 #include "content/public/browser/resource_request_info.h" | 19 #include "content/public/browser/resource_request_info.h" |
| 18 #include "content/public/browser/resource_throttle.h" | 20 #include "content/public/browser/resource_throttle.h" |
| 19 #include "content/public/browser/web_contents.h" | 21 #include "content/public/browser/web_contents.h" |
| 20 #include "content/public/browser/web_contents_delegate.h" | 22 #include "content/public/browser/web_contents_delegate.h" |
| 21 #include "content/public/common/page_transition_types.h" | 23 #include "content/public/common/page_transition_types.h" |
| 22 #include "content/public/test/mock_resource_context.h" | 24 #include "content/public/test/mock_resource_context.h" |
| 23 #include "content/public/test/test_browser_thread.h" | |
| 24 #include "content/public/test/test_renderer_host.h" | 25 #include "content/public/test/test_renderer_host.h" |
| 25 #include "net/url_request/url_request.h" | 26 #include "net/url_request/url_request.h" |
| 26 #include "testing/gmock/include/gmock/gmock.h" | 27 #include "testing/gmock/include/gmock/gmock.h" |
| 27 #include "testing/gtest/include/gtest/gtest.h" | 28 #include "testing/gtest/include/gtest/gtest.h" |
| 28 | 29 |
| 29 using testing::_; | 30 using testing::_; |
| 30 using testing::Eq; | 31 using testing::Eq; |
| 31 using testing::Property; | 32 using testing::Property; |
| 32 using testing::Ne; | 33 using testing::Ne; |
| 33 using testing::Return; | 34 using testing::Return; |
| 34 | 35 |
| 35 namespace navigation_interception { | 36 namespace navigation_interception { |
| 36 | 37 |
| 37 namespace { | 38 namespace { |
| 38 | 39 |
| 39 const char kTestUrl[] = "http://www.test.com/"; | 40 const char kTestUrl[] = "http://www.test.com/"; |
| 40 const char kUnsafeTestUrl[] = "about:crash"; | 41 const char kUnsafeTestUrl[] = "about:crash"; |
| 41 | 42 |
| 42 void ContinueTestCase() { | |
| 43 content::BrowserThread::PostTask( | |
| 44 content::BrowserThread::UI, FROM_HERE, base::MessageLoop::QuitClosure()); | |
| 45 } | |
| 46 | |
| 47 // The MS C++ compiler complains about not being able to resolve which url() | 43 // The MS C++ compiler complains about not being able to resolve which url() |
| 48 // method (const or non-const) to use if we use the Property matcher to check | 44 // method (const or non-const) to use if we use the Property matcher to check |
| 49 // the return value of the NavigationParams::url() method. | 45 // the return value of the NavigationParams::url() method. |
| 50 // It is possible to suppress the error by specifying the types directly but | 46 // It is possible to suppress the error by specifying the types directly but |
| 51 // that results in very ugly syntax, which is why these custom matchers are | 47 // that results in very ugly syntax, which is why these custom matchers are |
| 52 // used instead. | 48 // used instead. |
| 53 MATCHER(NavigationParamsUrlIsTest, "") { | 49 MATCHER(NavigationParamsUrlIsTest, "") { |
| 54 return arg.url() == GURL(kTestUrl); | 50 return arg.url() == GURL(kTestUrl); |
| 55 } | 51 } |
| 56 | 52 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 84 } | 80 } |
| 85 | 81 |
| 86 Status status() const { return status_; } | 82 Status status() const { return status_; } |
| 87 | 83 |
| 88 // ResourceController: | 84 // ResourceController: |
| 89 virtual void Cancel() OVERRIDE { | 85 virtual void Cancel() OVERRIDE { |
| 90 NOTREACHED(); | 86 NOTREACHED(); |
| 91 } | 87 } |
| 92 virtual void CancelAndIgnore() OVERRIDE { | 88 virtual void CancelAndIgnore() OVERRIDE { |
| 93 status_ = CANCELLED; | 89 status_ = CANCELLED; |
| 94 ContinueTestCase(); | |
| 95 } | 90 } |
| 96 virtual void CancelWithError(int error_code) OVERRIDE { | 91 virtual void CancelWithError(int error_code) OVERRIDE { |
| 97 NOTREACHED(); | 92 NOTREACHED(); |
| 98 } | 93 } |
| 99 virtual void Resume() OVERRIDE { | 94 virtual void Resume() OVERRIDE { |
| 100 DCHECK(status_ == UNKNOWN); | 95 DCHECK(status_ == UNKNOWN); |
| 101 status_ = RESUMED; | 96 status_ = RESUMED; |
| 102 ContinueTestCase(); | |
| 103 } | 97 } |
| 104 | 98 |
| 105 private: | 99 private: |
| 106 Status status_; | 100 Status status_; |
| 107 }; | 101 }; |
| 108 | 102 |
| 109 // TestIOThreadState ---------------------------------------------------------- | 103 // TestIOThreadState ---------------------------------------------------------- |
| 110 | 104 |
| 111 class TestIOThreadState { | 105 class TestIOThreadState { |
| 112 public: | 106 public: |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 MockResourceController throttle_controller_; | 149 MockResourceController throttle_controller_; |
| 156 }; | 150 }; |
| 157 | 151 |
| 158 // InterceptNavigationResourceThrottleTest ------------------------------------ | 152 // InterceptNavigationResourceThrottleTest ------------------------------------ |
| 159 | 153 |
| 160 class InterceptNavigationResourceThrottleTest | 154 class InterceptNavigationResourceThrottleTest |
| 161 : public content::RenderViewHostTestHarness { | 155 : public content::RenderViewHostTestHarness { |
| 162 public: | 156 public: |
| 163 InterceptNavigationResourceThrottleTest() | 157 InterceptNavigationResourceThrottleTest() |
| 164 : mock_callback_receiver_(new MockInterceptCallbackReceiver()), | 158 : mock_callback_receiver_(new MockInterceptCallbackReceiver()), |
| 165 ui_thread_(content::BrowserThread::UI, &message_loop_), | |
| 166 io_thread_(content::BrowserThread::IO), | |
| 167 io_thread_state_(NULL) { | 159 io_thread_state_(NULL) { |
| 168 } | 160 } |
| 169 | 161 |
| 170 virtual void SetUp() OVERRIDE { | 162 virtual void SetUp() OVERRIDE { |
| 171 RenderViewHostTestHarness::SetUp(); | 163 RenderViewHostTestHarness::SetUp(); |
| 172 | |
| 173 io_thread_.StartIOThread(); | |
| 174 } | 164 } |
| 175 | 165 |
| 176 virtual void TearDown() OVERRIDE { | 166 virtual void TearDown() OVERRIDE { |
| 177 if (web_contents()) | 167 if (web_contents()) |
| 178 web_contents()->SetDelegate(NULL); | 168 web_contents()->SetDelegate(NULL); |
| 179 | 169 |
| 180 content::BrowserThread::PostTask( | 170 content::BrowserThread::PostTask( |
| 181 content::BrowserThread::IO, | 171 content::BrowserThread::IO, |
| 182 FROM_HERE, | 172 FROM_HERE, |
| 183 base::Bind(&base::DeletePointer<TestIOThreadState>, io_thread_state_)); | 173 base::Bind(&base::DeletePointer<TestIOThreadState>, io_thread_state_)); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 195 int render_process_id, | 185 int render_process_id, |
| 196 int render_view_id, | 186 int render_view_id, |
| 197 bool* defer) { | 187 bool* defer) { |
| 198 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); | 188 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| 199 TestIOThreadState* io_thread_state = | 189 TestIOThreadState* io_thread_state = |
| 200 new TestIOThreadState(url, render_process_id, render_view_id, | 190 new TestIOThreadState(url, render_process_id, render_view_id, |
| 201 request_method, mock_callback_receiver_.get()); | 191 request_method, mock_callback_receiver_.get()); |
| 202 | 192 |
| 203 SetIOThreadState(io_thread_state); | 193 SetIOThreadState(io_thread_state); |
| 204 io_thread_state->ThrottleWillStartRequest(defer); | 194 io_thread_state->ThrottleWillStartRequest(defer); |
| 205 | |
| 206 if (!*defer) { | |
| 207 ContinueTestCase(); | |
| 208 } | |
| 209 } | 195 } |
| 210 | 196 |
| 211 protected: | 197 protected: |
| 212 enum ShouldIgnoreNavigationCallbackAction { | 198 enum ShouldIgnoreNavigationCallbackAction { |
| 213 IgnoreNavigation, | 199 IgnoreNavigation, |
| 214 DontIgnoreNavigation | 200 DontIgnoreNavigation |
| 215 }; | 201 }; |
| 216 | 202 |
| 217 void SetUpWebContentsDelegateAndRunMessageLoop( | 203 void SetUpWebContentsDelegateAndDrainRunLoop( |
| 218 ShouldIgnoreNavigationCallbackAction callback_action, | 204 ShouldIgnoreNavigationCallbackAction callback_action, |
| 219 bool* defer) { | 205 bool* defer) { |
| 220 | 206 |
| 221 ON_CALL(*mock_callback_receiver_, ShouldIgnoreNavigation(_, _)) | 207 ON_CALL(*mock_callback_receiver_, ShouldIgnoreNavigation(_, _)) |
| 222 .WillByDefault(Return(callback_action == IgnoreNavigation)); | 208 .WillByDefault(Return(callback_action == IgnoreNavigation)); |
| 223 EXPECT_CALL(*mock_callback_receiver_, | 209 EXPECT_CALL(*mock_callback_receiver_, |
| 224 ShouldIgnoreNavigation(rvh(), NavigationParamsUrlIsTest())) | 210 ShouldIgnoreNavigation(rvh(), NavigationParamsUrlIsTest())) |
| 225 .Times(1); | 211 .Times(1); |
| 226 | 212 |
| 227 content::BrowserThread::PostTask( | 213 content::BrowserThread::PostTask( |
| 228 content::BrowserThread::IO, | 214 content::BrowserThread::IO, |
| 229 FROM_HERE, | 215 FROM_HERE, |
| 230 base::Bind( | 216 base::Bind( |
| 231 &InterceptNavigationResourceThrottleTest:: | 217 &InterceptNavigationResourceThrottleTest:: |
| 232 RunThrottleWillStartRequestOnIOThread, | 218 RunThrottleWillStartRequestOnIOThread, |
| 233 base::Unretained(this), | 219 base::Unretained(this), |
| 234 GURL(kTestUrl), | 220 GURL(kTestUrl), |
| 235 "GET", | 221 "GET", |
| 236 web_contents()->GetRenderViewHost()->GetProcess()->GetID(), | 222 web_contents()->GetRenderViewHost()->GetProcess()->GetID(), |
| 237 web_contents()->GetRenderViewHost()->GetRoutingID(), | 223 web_contents()->GetRenderViewHost()->GetRoutingID(), |
| 238 base::Unretained(defer))); | 224 base::Unretained(defer))); |
| 239 | 225 |
| 240 // Wait for the request to finish processing. | 226 // Wait for the request to finish processing. |
| 241 message_loop_.Run(); | 227 base::RunLoop().RunUntilIdle(); |
| 242 } | 228 } |
| 243 | 229 |
| 244 void WaitForPreviouslyScheduledIoThreadWork() { | 230 void WaitForPreviouslyScheduledIoThreadWork() { |
| 245 base::WaitableEvent io_thread_work_done(true, false); | 231 base::WaitableEvent io_thread_work_done(true, false); |
| 246 content::BrowserThread::PostTask( | 232 content::BrowserThread::PostTask( |
| 247 content::BrowserThread::IO, | 233 content::BrowserThread::IO, |
| 248 FROM_HERE, | 234 FROM_HERE, |
| 249 base::Bind( | 235 base::Bind( |
| 250 &base::WaitableEvent::Signal, | 236 &base::WaitableEvent::Signal, |
| 251 base::Unretained(&io_thread_work_done))); | 237 base::Unretained(&io_thread_work_done))); |
| 252 io_thread_work_done.Wait(); | 238 io_thread_work_done.Wait(); |
| 253 } | 239 } |
| 254 | 240 |
| 255 scoped_ptr<MockInterceptCallbackReceiver> mock_callback_receiver_; | 241 scoped_ptr<MockInterceptCallbackReceiver> mock_callback_receiver_; |
| 256 content::TestBrowserThread ui_thread_; | |
| 257 content::TestBrowserThread io_thread_; | |
| 258 TestIOThreadState* io_thread_state_; | 242 TestIOThreadState* io_thread_state_; |
| 259 }; | 243 }; |
| 260 | 244 |
| 261 TEST_F(InterceptNavigationResourceThrottleTest, | 245 TEST_F(InterceptNavigationResourceThrottleTest, |
| 262 RequestDeferredAndResumedIfNavigationNotIgnored) { | 246 RequestDeferredAndResumedIfNavigationNotIgnored) { |
| 263 bool defer = false; | 247 bool defer = false; |
| 264 SetUpWebContentsDelegateAndRunMessageLoop(DontIgnoreNavigation, &defer); | 248 SetUpWebContentsDelegateAndDrainRunLoop(DontIgnoreNavigation, &defer); |
| 265 | 249 |
| 266 EXPECT_TRUE(defer); | 250 EXPECT_TRUE(defer); |
| 267 EXPECT_TRUE(io_thread_state_); | 251 EXPECT_TRUE(io_thread_state_); |
| 268 EXPECT_TRUE(io_thread_state_->request_resumed()); | 252 EXPECT_TRUE(io_thread_state_->request_resumed()); |
| 269 } | 253 } |
| 270 | 254 |
| 271 TEST_F(InterceptNavigationResourceThrottleTest, | 255 TEST_F(InterceptNavigationResourceThrottleTest, |
| 272 RequestDeferredAndCancelledIfNavigationIgnored) { | 256 RequestDeferredAndCancelledIfNavigationIgnored) { |
| 273 bool defer = false; | 257 bool defer = false; |
| 274 SetUpWebContentsDelegateAndRunMessageLoop(IgnoreNavigation, &defer); | 258 SetUpWebContentsDelegateAndDrainRunLoop(IgnoreNavigation, &defer); |
| 275 | 259 |
| 276 EXPECT_TRUE(defer); | 260 EXPECT_TRUE(defer); |
| 277 EXPECT_TRUE(io_thread_state_); | 261 EXPECT_TRUE(io_thread_state_); |
| 278 EXPECT_TRUE(io_thread_state_->request_cancelled()); | 262 EXPECT_TRUE(io_thread_state_->request_cancelled()); |
| 279 } | 263 } |
| 280 | 264 |
| 281 TEST_F(InterceptNavigationResourceThrottleTest, | 265 TEST_F(InterceptNavigationResourceThrottleTest, |
| 282 NoCallbackMadeIfContentsDeletedWhileThrottleRunning) { | 266 NoCallbackMadeIfContentsDeletedWhileThrottleRunning) { |
| 283 bool defer = false; | 267 bool defer = false; |
| 284 | 268 |
| 285 // The tested scenario is when the WebContents is deleted after the | 269 // The tested scenario is when the WebContents is deleted after the |
| 286 // ResourceThrottle has finished processing on the IO thread but before the | 270 // ResourceThrottle has finished processing on the IO thread but before the |
| 287 // UI thread callback has been processed. | 271 // UI thread callback has been processed. Since both threads in this test |
| 288 content::BrowserThread::PostTask( | 272 // are serviced by one message loop, the post order is the execution order. |
| 289 content::BrowserThread::UI, | |
| 290 FROM_HERE, | |
| 291 base::Bind( | |
| 292 &RenderViewHostTestHarness::DeleteContents, | |
| 293 base::Unretained(this))); | |
| 294 | |
| 295 EXPECT_CALL(*mock_callback_receiver_, | 273 EXPECT_CALL(*mock_callback_receiver_, |
| 296 ShouldIgnoreNavigation(_, _)) | 274 ShouldIgnoreNavigation(_, _)) |
| 297 .Times(0); | 275 .Times(0); |
| 298 | 276 |
| 299 content::BrowserThread::PostTask( | 277 content::BrowserThread::PostTask( |
| 300 content::BrowserThread::IO, | 278 content::BrowserThread::IO, |
| 301 FROM_HERE, | 279 FROM_HERE, |
| 302 base::Bind( | 280 base::Bind( |
| 303 &InterceptNavigationResourceThrottleTest:: | 281 &InterceptNavigationResourceThrottleTest:: |
| 304 RunThrottleWillStartRequestOnIOThread, | 282 RunThrottleWillStartRequestOnIOThread, |
| 305 base::Unretained(this), | 283 base::Unretained(this), |
| 306 GURL(kTestUrl), | 284 GURL(kTestUrl), |
| 307 "GET", | 285 "GET", |
| 308 web_contents()->GetRenderViewHost()->GetProcess()->GetID(), | 286 web_contents()->GetRenderViewHost()->GetProcess()->GetID(), |
| 309 web_contents()->GetRenderViewHost()->GetRoutingID(), | 287 web_contents()->GetRenderViewHost()->GetRoutingID(), |
| 310 base::Unretained(&defer))); | 288 base::Unretained(&defer))); |
| 311 | 289 |
| 312 WaitForPreviouslyScheduledIoThreadWork(); | 290 content::BrowserThread::PostTask( |
| 291 content::BrowserThread::UI, |
| 292 FROM_HERE, |
| 293 base::Bind( |
| 294 &RenderViewHostTestHarness::DeleteContents, |
| 295 base::Unretained(this))); |
| 313 | 296 |
| 314 // The WebContents will now be deleted and only after that will the UI-thread | 297 // The WebContents will now be deleted and only after that will the UI-thread |
| 315 // callback posted by the ResourceThrottle be executed. | 298 // callback posted by the ResourceThrottle be executed. |
| 316 message_loop_.Run(); | 299 base::RunLoop().RunUntilIdle(); |
| 317 | 300 |
| 318 EXPECT_TRUE(defer); | 301 EXPECT_TRUE(defer); |
| 319 EXPECT_TRUE(io_thread_state_); | 302 EXPECT_TRUE(io_thread_state_); |
| 320 EXPECT_TRUE(io_thread_state_->request_resumed()); | 303 EXPECT_TRUE(io_thread_state_->request_resumed()); |
| 321 } | 304 } |
| 322 | 305 |
| 323 TEST_F(InterceptNavigationResourceThrottleTest, | 306 TEST_F(InterceptNavigationResourceThrottleTest, |
| 324 RequestNotDeferredForRequestNotAssociatedWithARenderView) { | 307 RequestNotDeferredForRequestNotAssociatedWithARenderView) { |
| 325 bool defer = false; | 308 bool defer = false; |
| 326 | 309 |
| 327 content::BrowserThread::PostTask( | 310 content::BrowserThread::PostTask( |
| 328 content::BrowserThread::IO, | 311 content::BrowserThread::IO, |
| 329 FROM_HERE, | 312 FROM_HERE, |
| 330 base::Bind( | 313 base::Bind( |
| 331 &InterceptNavigationResourceThrottleTest:: | 314 &InterceptNavigationResourceThrottleTest:: |
| 332 RunThrottleWillStartRequestOnIOThread, | 315 RunThrottleWillStartRequestOnIOThread, |
| 333 base::Unretained(this), | 316 base::Unretained(this), |
| 334 GURL(kTestUrl), | 317 GURL(kTestUrl), |
| 335 "GET", | 318 "GET", |
| 336 MSG_ROUTING_NONE, | 319 MSG_ROUTING_NONE, |
| 337 MSG_ROUTING_NONE, | 320 MSG_ROUTING_NONE, |
| 338 base::Unretained(&defer))); | 321 base::Unretained(&defer))); |
| 339 | 322 |
| 340 // Wait for the request to finish processing. | 323 // Wait for the request to finish processing. |
| 341 message_loop_.Run(); | 324 base::RunLoop().RunUntilIdle(); |
| 342 | 325 |
| 343 EXPECT_FALSE(defer); | 326 EXPECT_FALSE(defer); |
| 344 } | 327 } |
| 345 | 328 |
| 346 TEST_F(InterceptNavigationResourceThrottleTest, | 329 TEST_F(InterceptNavigationResourceThrottleTest, |
| 347 CallbackCalledWithFilteredUrl) { | 330 CallbackCalledWithFilteredUrl) { |
| 348 bool defer = false; | 331 bool defer = false; |
| 349 | 332 |
| 350 ON_CALL(*mock_callback_receiver_, | 333 ON_CALL(*mock_callback_receiver_, |
| 351 ShouldIgnoreNavigation(_, NavigationParamsUrlIsSafe())) | 334 ShouldIgnoreNavigation(_, NavigationParamsUrlIsSafe())) |
| 352 .WillByDefault(Return(false)); | 335 .WillByDefault(Return(false)); |
| 353 EXPECT_CALL(*mock_callback_receiver_, | 336 EXPECT_CALL(*mock_callback_receiver_, |
| 354 ShouldIgnoreNavigation(_, NavigationParamsUrlIsSafe())) | 337 ShouldIgnoreNavigation(_, NavigationParamsUrlIsSafe())) |
| 355 .Times(1); | 338 .Times(1); |
| 356 | 339 |
| 357 content::BrowserThread::PostTask( | 340 content::BrowserThread::PostTask( |
| 358 content::BrowserThread::IO, | 341 content::BrowserThread::IO, |
| 359 FROM_HERE, | 342 FROM_HERE, |
| 360 base::Bind( | 343 base::Bind( |
| 361 &InterceptNavigationResourceThrottleTest:: | 344 &InterceptNavigationResourceThrottleTest:: |
| 362 RunThrottleWillStartRequestOnIOThread, | 345 RunThrottleWillStartRequestOnIOThread, |
| 363 base::Unretained(this), | 346 base::Unretained(this), |
| 364 GURL(kUnsafeTestUrl), | 347 GURL(kUnsafeTestUrl), |
| 365 "GET", | 348 "GET", |
| 366 web_contents()->GetRenderViewHost()->GetProcess()->GetID(), | 349 web_contents()->GetRenderViewHost()->GetProcess()->GetID(), |
| 367 web_contents()->GetRenderViewHost()->GetRoutingID(), | 350 web_contents()->GetRenderViewHost()->GetRoutingID(), |
| 368 base::Unretained(&defer))); | 351 base::Unretained(&defer))); |
| 369 | 352 |
| 370 // Wait for the request to finish processing. | 353 // Wait for the request to finish processing. |
| 371 message_loop_.Run(); | 354 base::RunLoop().RunUntilIdle(); |
| 372 } | 355 } |
| 373 | 356 |
| 374 TEST_F(InterceptNavigationResourceThrottleTest, | 357 TEST_F(InterceptNavigationResourceThrottleTest, |
| 375 CallbackIsPostFalseForGet) { | 358 CallbackIsPostFalseForGet) { |
| 376 bool defer = false; | 359 bool defer = false; |
| 377 | 360 |
| 378 EXPECT_CALL(*mock_callback_receiver_, | 361 EXPECT_CALL(*mock_callback_receiver_, |
| 379 ShouldIgnoreNavigation(_, AllOf( | 362 ShouldIgnoreNavigation(_, AllOf( |
| 380 NavigationParamsUrlIsSafe(), | 363 NavigationParamsUrlIsSafe(), |
| 381 Property(&NavigationParams::is_post, Eq(false))))) | 364 Property(&NavigationParams::is_post, Eq(false))))) |
| 382 .WillOnce(Return(false)); | 365 .WillOnce(Return(false)); |
| 383 | 366 |
| 384 content::BrowserThread::PostTask( | 367 content::BrowserThread::PostTask( |
| 385 content::BrowserThread::IO, | 368 content::BrowserThread::IO, |
| 386 FROM_HERE, | 369 FROM_HERE, |
| 387 base::Bind( | 370 base::Bind( |
| 388 &InterceptNavigationResourceThrottleTest:: | 371 &InterceptNavigationResourceThrottleTest:: |
| 389 RunThrottleWillStartRequestOnIOThread, | 372 RunThrottleWillStartRequestOnIOThread, |
| 390 base::Unretained(this), | 373 base::Unretained(this), |
| 391 GURL(kTestUrl), | 374 GURL(kTestUrl), |
| 392 "GET", | 375 "GET", |
| 393 web_contents()->GetRenderViewHost()->GetProcess()->GetID(), | 376 web_contents()->GetRenderViewHost()->GetProcess()->GetID(), |
| 394 web_contents()->GetRenderViewHost()->GetRoutingID(), | 377 web_contents()->GetRenderViewHost()->GetRoutingID(), |
| 395 base::Unretained(&defer))); | 378 base::Unretained(&defer))); |
| 396 | 379 |
| 397 // Wait for the request to finish processing. | 380 // Wait for the request to finish processing. |
| 398 message_loop_.Run(); | 381 base::RunLoop().RunUntilIdle(); |
| 399 } | 382 } |
| 400 | 383 |
| 401 TEST_F(InterceptNavigationResourceThrottleTest, | 384 TEST_F(InterceptNavigationResourceThrottleTest, |
| 402 CallbackIsPostTrueForPost) { | 385 CallbackIsPostTrueForPost) { |
| 403 bool defer = false; | 386 bool defer = false; |
| 404 | 387 |
| 405 EXPECT_CALL(*mock_callback_receiver_, | 388 EXPECT_CALL(*mock_callback_receiver_, |
| 406 ShouldIgnoreNavigation(_, AllOf( | 389 ShouldIgnoreNavigation(_, AllOf( |
| 407 NavigationParamsUrlIsSafe(), | 390 NavigationParamsUrlIsSafe(), |
| 408 Property(&NavigationParams::is_post, Eq(true))))) | 391 Property(&NavigationParams::is_post, Eq(true))))) |
| 409 .WillOnce(Return(false)); | 392 .WillOnce(Return(false)); |
| 410 | 393 |
| 411 content::BrowserThread::PostTask( | 394 content::BrowserThread::PostTask( |
| 412 content::BrowserThread::IO, | 395 content::BrowserThread::IO, |
| 413 FROM_HERE, | 396 FROM_HERE, |
| 414 base::Bind( | 397 base::Bind( |
| 415 &InterceptNavigationResourceThrottleTest:: | 398 &InterceptNavigationResourceThrottleTest:: |
| 416 RunThrottleWillStartRequestOnIOThread, | 399 RunThrottleWillStartRequestOnIOThread, |
| 417 base::Unretained(this), | 400 base::Unretained(this), |
| 418 GURL(kTestUrl), | 401 GURL(kTestUrl), |
| 419 "POST", | 402 "POST", |
| 420 web_contents()->GetRenderViewHost()->GetProcess()->GetID(), | 403 web_contents()->GetRenderViewHost()->GetProcess()->GetID(), |
| 421 web_contents()->GetRenderViewHost()->GetRoutingID(), | 404 web_contents()->GetRenderViewHost()->GetRoutingID(), |
| 422 base::Unretained(&defer))); | 405 base::Unretained(&defer))); |
| 423 | 406 |
| 424 // Wait for the request to finish processing. | 407 // Wait for the request to finish processing. |
| 425 message_loop_.Run(); | 408 base::RunLoop().RunUntilIdle(); |
| 426 } | 409 } |
| 427 | 410 |
| 428 } // namespace navigation_interception | 411 } // namespace navigation_interception |
| OLD | NEW |