1 // Copyright 2014 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_TEST_TEST_FRAME_NAVIGATION_OBSERVER_H_ 6 #define CONTENT_TEST_TEST_FRAME_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/browser/web_contents_observer.h" 14 #include "content/public/test/test_utils.h" 15 16 class GURL; 17 18 namespace content { 19 class FrameTreeNode; 20 class RenderFrameHostImpl; 21 class WebContents; 22 struct LoadCommittedDetails; 23 24 // For content_browsertests, which run on the UI thread, run a second 25 // MessageLoop and quit when the navigation in a specific frame completes 26 // loading. 27 class TestFrameNavigationObserver : public WebContentsObserver { 28 public: 29 // Create and register a new TestFrameNavigationObserver which will track 30 // navigations performed in the specified |node| of the frame tree. 31 TestFrameNavigationObserver(FrameTreeNode* node, int number_of_navigations); 32 // As above but waits for one navigation. 33 explicit TestFrameNavigationObserver(FrameTreeNode* node); 34 35 virtual ~TestFrameNavigationObserver(); 36 37 // Runs a nested message loop and blocks until the expected number of 38 // navigations are complete. 39 void Wait(); 40 41 private: 42 // WebContentsObserver 43 virtual void DidStartProvisionalLoadForFrame( 44 RenderFrameHost* render_frame_host, 45 const GURL& validated_url, 46 bool is_error_page, 47 bool is_iframe_srcdoc) OVERRIDE; 48 virtual void DidNavigateAnyFrame( 49 const LoadCommittedDetails& details, 50 const FrameNavigateParams& params) OVERRIDE; 51 52 // The id of the FrameTreeNode in which navigations are peformed. 53 int frame_tree_node_id_; 54 55 // If true the navigation has started. 56 bool navigation_started_; 57 58 // The number of navigations that have been completed. 59 int navigations_completed_; 60 61 // The number of navigations to wait for. 62 int number_of_navigations_; 63 64 // The MessageLoopRunner used to spin the message loop. 65 scoped_refptr<MessageLoopRunner> message_loop_runner_; 66 67 DISALLOW_COPY_AND_ASSIGN(TestFrameNavigationObserver); 68 }; 69 70 } // namespace content 71 72 #endif // CONTENT_TEST_TEST_FRAME_NAVIGATION_OBSERVER_H_ 73