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
3 // found in the LICENSE file.
5 #ifndef CONTENT_PUBLIC_TEST_TEST_NAVIGATION_OBSERVER_H_
6 #define CONTENT_PUBLIC_TEST_TEST_NAVIGATION_OBSERVER_H_
10 #include "base/callback.h"
11 #include "base/compiler_specific.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "content/public/test/test_utils.h"
17 struct LoadCommittedDetails
;
19 // For browser_tests, which run on the UI thread, run a second
20 // MessageLoop and quit when the navigation completes loading.
21 class TestNavigationObserver
{
23 // Create and register a new TestNavigationObserver against the
25 TestNavigationObserver(WebContents
* web_contents
,
26 int number_of_navigations
);
27 // Like above but waits for one navigation.
28 explicit TestNavigationObserver(WebContents
* web_contents
);
30 virtual ~TestNavigationObserver();
32 // Runs a nested message loop and blocks until the expected number of
33 // navigations are complete.
36 // Start/stop watching newly created WebContents.
37 void StartWatchingNewWebContents();
38 void StopWatchingNewWebContents();
41 // Register this TestNavigationObserver as an observer of the |web_contents|.
42 void RegisterAsObserver(WebContents
* web_contents
);
45 class TestWebContentsObserver
;
47 // Callbacks for WebContents-related events.
48 void OnWebContentsCreated(WebContents
* web_contents
);
49 void OnWebContentsDestroyed(TestWebContentsObserver
* observer
,
50 WebContents
* web_contents
);
51 void OnNavigationEntryCommitted(
52 TestWebContentsObserver
* observer
,
53 WebContents
* web_contents
,
54 const LoadCommittedDetails
& load_details
);
55 void OnDidAttachInterstitialPage(WebContents
* web_contents
);
56 void OnDidStartLoading(WebContents
* web_contents
);
57 void OnDidStopLoading(WebContents
* web_contents
);
59 // If true the navigation has started.
60 bool navigation_started_
;
62 // The number of navigations that have been completed.
63 int navigations_completed_
;
65 // The number of navigations to wait for.
66 int number_of_navigations_
;
68 // The MessageLoopRunner used to spin the message loop.
69 scoped_refptr
<MessageLoopRunner
> message_loop_runner_
;
71 // Callback invoked on WebContents creation.
72 base::Callback
<void(WebContents
*)> web_contents_created_callback_
;
74 // Living TestWebContentsObservers created by this observer.
75 std::set
<TestWebContentsObserver
*> web_contents_observers_
;
77 DISALLOW_COPY_AND_ASSIGN(TestNavigationObserver
);
80 } // namespace content
82 #endif // CONTENT_PUBLIC_TEST_TEST_NAVIGATION_OBSERVER_H_