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_TEST_TEST_WEB_CONTENTS_H_
      6 #define CONTENT_TEST_TEST_WEB_CONTENTS_H_
      7 
      8 #include "content/browser/web_contents/web_contents_impl.h"
      9 #include "content/public/common/page_transition_types.h"
     10 #include "content/public/test/web_contents_tester.h"
     11 #include "webkit/common/webpreferences.h"
     12 
     13 class SiteInstanceImpl;
     14 
     15 namespace content {
     16 
     17 class RenderViewHost;
     18 class TestRenderViewHost;
     19 class WebContentsTester;
     20 
     21 // Subclass WebContentsImpl to ensure it creates TestRenderViewHosts
     22 // and does not do anything involving views.
     23 class TestWebContents : public WebContentsImpl, public WebContentsTester {
     24  public:
     25   virtual ~TestWebContents();
     26 
     27   static TestWebContents* Create(BrowserContext* browser_context,
     28                                  SiteInstance* instance);
     29 
     30   // WebContentsTester implementation.
     31   virtual void CommitPendingNavigation() OVERRIDE;
     32   virtual RenderViewHost* GetPendingRenderViewHost() const OVERRIDE;
     33   virtual void NavigateAndCommit(const GURL& url) OVERRIDE;
     34   virtual void TestSetIsLoading(bool value) OVERRIDE;
     35   virtual void ProceedWithCrossSiteNavigation() OVERRIDE;
     36   virtual void TestDidNavigate(RenderViewHost* render_view_host,
     37                                int page_id,
     38                                const GURL& url,
     39                                PageTransition transition) OVERRIDE;
     40   virtual void TestDidNavigateWithReferrer(RenderViewHost* render_view_host,
     41                                            int page_id,
     42                                            const GURL& url,
     43                                            const Referrer& referrer,
     44                                            PageTransition transition) OVERRIDE;
     45   virtual WebPreferences TestGetWebkitPrefs() OVERRIDE;
     46 
     47   TestRenderViewHost* pending_test_rvh() const;
     48 
     49   // State accessor.
     50   bool cross_navigation_pending() {
     51     return GetRenderManager()->cross_navigation_pending_;
     52   }
     53 
     54   // Overrides WebContentsImpl::ShouldTransitionCrossSite so that we can test
     55   // both alternatives without using command-line switches.
     56   bool ShouldTransitionCrossSite() { return transition_cross_site; }
     57 
     58   // Prevent interaction with views.
     59   virtual bool CreateRenderViewForRenderManager(
     60       RenderViewHost* render_view_host, int opener_route_id) OVERRIDE;
     61   virtual void UpdateRenderViewSizeForRenderManager() OVERRIDE {}
     62 
     63   // Returns a clone of this TestWebContents. The returned object is also a
     64   // TestWebContents. The caller owns the returned object.
     65   virtual WebContents* Clone() OVERRIDE;
     66 
     67   // Set by individual tests.
     68   bool transition_cross_site;
     69 
     70   // Allow mocking of the RenderViewHostDelegateView.
     71   virtual RenderViewHostDelegateView* GetDelegateView() OVERRIDE;
     72   void set_delegate_view(RenderViewHostDelegateView* view) {
     73     delegate_view_override_ = view;
     74   }
     75 
     76   // Allows us to simulate this tab having an opener.
     77   void SetOpener(TestWebContents* opener);
     78 
     79   // Allows us to simulate that a contents was created via CreateNewWindow.
     80   void AddPendingContents(TestWebContents* contents);
     81 
     82   // Establish expected arguments for |SetHistoryLengthAndPrune()|. When
     83   // |SetHistoryLengthAndPrune()| is called, the arguments are compared
     84   // with the expected arguments specified here.
     85   void ExpectSetHistoryLengthAndPrune(const SiteInstance* site_instance,
     86                                       int history_length,
     87                                       int32 min_page_id);
     88 
     89   // Compares the arguments passed in with the expected arguments passed in
     90   // to |ExpectSetHistoryLengthAndPrune()|.
     91   virtual void SetHistoryLengthAndPrune(const SiteInstance* site_instance,
     92                                         int history_length,
     93                                         int32 min_page_id) OVERRIDE;
     94 
     95   void TestDidFinishLoad(int64 frame_id, const GURL& url, bool is_main_frame);
     96   void TestDidFailLoadWithError(int64 frame_id,
     97                                 const GURL& url,
     98                                 bool is_main_frame,
     99                                 int error_code,
    100                                 const base::string16& error_description);
    101 
    102  protected:
    103   // The deprecated WebContentsTester still needs to subclass this.
    104   explicit TestWebContents(BrowserContext* browser_context);
    105 
    106  private:
    107   // WebContentsImpl overrides
    108   virtual void CreateNewWindow(
    109       int render_process_id,
    110       int route_id,
    111       int main_frame_route_id,
    112       const ViewHostMsg_CreateWindow_Params& params,
    113       SessionStorageNamespace* session_storage_namespace) OVERRIDE;
    114   virtual void CreateNewWidget(int render_process_id,
    115                                int route_id,
    116                                blink::WebPopupType popup_type) OVERRIDE;
    117   virtual void CreateNewFullscreenWidget(int render_process_id,
    118                                          int route_id) OVERRIDE;
    119   virtual void ShowCreatedWindow(int route_id,
    120                                  WindowOpenDisposition disposition,
    121                                  const gfx::Rect& initial_pos,
    122                                  bool user_gesture) OVERRIDE;
    123   virtual void ShowCreatedWidget(int route_id,
    124                                  const gfx::Rect& initial_pos) OVERRIDE;
    125   virtual void ShowCreatedFullscreenWidget(int route_id) OVERRIDE;
    126 
    127 
    128   RenderViewHostDelegateView* delegate_view_override_;
    129 
    130   // Expectations for arguments of |SetHistoryLengthAndPrune()|.
    131   bool expect_set_history_length_and_prune_;
    132   scoped_refptr<const SiteInstanceImpl>
    133     expect_set_history_length_and_prune_site_instance_;
    134   int expect_set_history_length_and_prune_history_length_;
    135   int32 expect_set_history_length_and_prune_min_page_id_;
    136 };
    137 
    138 }  // namespace content
    139 
    140 #endif  // CONTENT_TEST_TEST_WEB_CONTENTS_H_
    141