Home | History | Annotate | Download | only in test
      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.
      4 
      5 #ifndef CONTENT_PUBLIC_TEST_TEST_NAVIGATION_OBSERVER_H_
      6 #define CONTENT_PUBLIC_TEST_TEST_NAVIGATION_OBSERVER_H_
      7 
      8 #include <set>
      9 
     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"
     14 
     15 namespace content {
     16 class WebContents;
     17 struct LoadCommittedDetails;
     18 
     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 {
     22  public:
     23   // Create and register a new TestNavigationObserver against the
     24   // |web_contents|.
     25   TestNavigationObserver(WebContents* web_contents,
     26                          int number_of_navigations);
     27   // Like above but waits for one navigation.
     28   explicit TestNavigationObserver(WebContents* web_contents);
     29 
     30   virtual ~TestNavigationObserver();
     31 
     32   // Runs a nested message loop and blocks until the expected number of
     33   // navigations are complete.
     34   void Wait();
     35 
     36   // Start/stop watching newly created WebContents.
     37   void StartWatchingNewWebContents();
     38   void StopWatchingNewWebContents();
     39 
     40  protected:
     41   // Register this TestNavigationObserver as an observer of the |web_contents|.
     42   void RegisterAsObserver(WebContents* web_contents);
     43 
     44  private:
     45   class TestWebContentsObserver;
     46 
     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);
     58 
     59   // If true the navigation has started.
     60   bool navigation_started_;
     61 
     62   // The number of navigations that have been completed.
     63   int navigations_completed_;
     64 
     65   // The number of navigations to wait for.
     66   int number_of_navigations_;
     67 
     68   // The MessageLoopRunner used to spin the message loop.
     69   scoped_refptr<MessageLoopRunner> message_loop_runner_;
     70 
     71   // Callback invoked on WebContents creation.
     72   base::Callback<void(WebContents*)> web_contents_created_callback_;
     73 
     74   // Living TestWebContentsObservers created by this observer.
     75   std::set<TestWebContentsObserver*> web_contents_observers_;
     76 
     77   DISALLOW_COPY_AND_ASSIGN(TestNavigationObserver);
     78 };
     79 
     80 }  // namespace content
     81 
     82 #endif  // CONTENT_PUBLIC_TEST_TEST_NAVIGATION_OBSERVER_H_
     83