| Index: content/test/content_browser_test_utils_internal.cc
|
| diff --git a/content/test/content_browser_test_utils_internal.cc b/content/test/content_browser_test_utils_internal.cc
|
| index dad702ccd709105ec0488d78f59470ddc7e75abd..bb3c9691d8c84eafdfe64b2e9d1a18400835ea78 100644
|
| --- a/content/test/content_browser_test_utils_internal.cc
|
| +++ b/content/test/content_browser_test_utils_internal.cc
|
| @@ -29,11 +29,34 @@
|
| #include "content/public/test/browser_test_utils.h"
|
| #include "content/public/test/content_browser_test_utils.h"
|
| #include "content/shell/browser/shell.h"
|
| +#include "content/shell/browser/shell_javascript_dialog_manager.h"
|
| #include "content/test/test_frame_navigation_observer.h"
|
| #include "net/url_request/url_request.h"
|
|
|
| namespace content {
|
|
|
| +namespace {
|
| +
|
| +// Helper class used by the NavigationDelayer to pause navigations.
|
| +class NavigationDelayerThrottle : public NavigationThrottle {
|
| + public:
|
| + NavigationDelayerThrottle(NavigationHandle* handle,
|
| + base::Closure on_paused_closure)
|
| + : NavigationThrottle(handle), on_paused_closure_(on_paused_closure) {}
|
| + ~NavigationDelayerThrottle() override {}
|
| +
|
| + private:
|
| + // NavigationThrottle implementation.
|
| + NavigationThrottle::ThrottleCheckResult WillStartRequest() override {
|
| + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, on_paused_closure_);
|
| + return NavigationThrottle::DEFER;
|
| + }
|
| +
|
| + base::Closure on_paused_closure_;
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| void NavigateFrameToURL(FrameTreeNode* node, const GURL& url) {
|
| TestFrameNavigationObserver observer(node);
|
| NavigationController::LoadURLParams params(url);
|
| @@ -43,6 +66,13 @@ void NavigateFrameToURL(FrameTreeNode* node, const GURL& url) {
|
| observer.Wait();
|
| }
|
|
|
| +void SetProceedByDefaultOnBeforeUnload(Shell* shell, bool proceed) {
|
| + ShellJavaScriptDialogManager* manager =
|
| + static_cast<ShellJavaScriptDialogManager*>(
|
| + shell->GetJavaScriptDialogManager(shell->web_contents()));
|
| + manager->set_proceed_beforeunload_default(proceed);
|
| +}
|
| +
|
| FrameTreeVisualizer::FrameTreeVisualizer() {
|
| }
|
|
|
| @@ -325,4 +355,62 @@ void NavigationStallDelegate::RequestBeginning(
|
| throttles->push_back(new HttpRequestStallThrottle);
|
| }
|
|
|
| +NavigationDelayer::NavigationDelayer(WebContents* web_contents, const GURL& url)
|
| + : WebContentsObserver(web_contents),
|
| + url_(url),
|
| + navigation_paused_(false),
|
| + handle_(nullptr),
|
| + weak_factory_(this) {}
|
| +
|
| +NavigationDelayer::~NavigationDelayer() {}
|
| +
|
| +void NavigationDelayer::WaitForNavigationPaused() {
|
| + if (navigation_paused_)
|
| + return;
|
| + loop_runner_ = new MessageLoopRunner();
|
| + loop_runner_->Run();
|
| + loop_runner_ = nullptr;
|
| +}
|
| +
|
| +void NavigationDelayer::WaitForNavigationFinished() {
|
| + if (!handle_)
|
| + return;
|
| + loop_runner_ = new MessageLoopRunner();
|
| + loop_runner_->Run();
|
| + loop_runner_ = nullptr;
|
| +}
|
| +
|
| +void NavigationDelayer::ResumeNavigation() {
|
| + if (!navigation_paused_ || !handle_)
|
| + return;
|
| + navigation_paused_ = false;
|
| + handle_->Resume();
|
| +}
|
| +
|
| +void NavigationDelayer::DidStartNavigation(NavigationHandle* handle) {
|
| + if (handle_ || handle->GetURL() != url_)
|
| + return;
|
| +
|
| + handle_ = handle;
|
| + scoped_ptr<NavigationThrottle> throttle(new NavigationDelayerThrottle(
|
| + handle_, base::Bind(&NavigationDelayer::OnPausedNavigation,
|
| + weak_factory_.GetWeakPtr())));
|
| + handle_->RegisterThrottleForTesting(std::move(throttle));
|
| +}
|
| +
|
| +void NavigationDelayer::DidFinishNavigation(NavigationHandle* handle) {
|
| + if (handle != handle_)
|
| + return;
|
| + handle_ = nullptr;
|
| + navigation_paused_ = false;
|
| + if (loop_runner_)
|
| + loop_runner_->Quit();
|
| +}
|
| +
|
| +void NavigationDelayer::OnPausedNavigation() {
|
| + navigation_paused_ = true;
|
| + if (loop_runner_)
|
| + loop_runner_->Quit();
|
| +}
|
| +
|
| } // namespace content
|
|
|