Home | History | Annotate | Download | only in search
      1 // Copyright 2013 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 CHROME_BROWSER_UI_SEARCH_INSTANT_NTP_H_
      6 #define CHROME_BROWSER_UI_SEARCH_INSTANT_NTP_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/compiler_specific.h"
     12 #include "base/gtest_prod_util.h"
     13 #include "base/memory/scoped_ptr.h"
     14 #include "chrome/browser/ui/search/instant_loader.h"
     15 #include "chrome/browser/ui/search/instant_page.h"
     16 
     17 class InstantNTPPrerenderer;
     18 class Profile;
     19 
     20 namespace content {
     21 class RenderViewHost;
     22 class WebContents;
     23 }
     24 
     25 // InstantNTP is used to preload an Instant page that will be swapped in when a
     26 // user navigates to a New Tab Page (NTP). The InstantNTP contents are never
     27 // shown in an un-committed state.
     28 class InstantNTP : public InstantPage,
     29                    public InstantLoader::Delegate {
     30  public:
     31   InstantNTP(InstantNTPPrerenderer* delegate,
     32              const std::string& instant_url,
     33              Profile* profile);
     34   virtual ~InstantNTP();
     35 
     36   // Creates a new WebContents and loads |instant_url_| into it.
     37   // |on_stale_callback| will be called when |loader_| determines the page to
     38   // be stale.
     39   void InitContents(const base::Closure& on_stale_callback);
     40 
     41   // Releases the WebContents for the Instant page.  This should be called when
     42   // the page is about to be committed.
     43   scoped_ptr<content::WebContents> ReleaseContents();
     44 
     45  private:
     46   FRIEND_TEST_ALL_PREFIXES(InstantExtendedNetworkTest,
     47                            NTPReactsToNetworkChanges);
     48 
     49   // Overridden from content::WebContentsObserver:
     50   virtual void RenderViewCreated(
     51       content::RenderViewHost* render_view_host) OVERRIDE;
     52   virtual void RenderProcessGone(
     53       base::TerminationStatus status) OVERRIDE;
     54 
     55   // Overridden from InstantLoader::Delegate:
     56   virtual void OnSwappedContents() OVERRIDE;
     57   virtual content::WebContents* OpenURLFromTab(
     58       content::WebContents* source,
     59       const content::OpenURLParams& params) OVERRIDE;
     60   virtual void LoadCompletedMainFrame() OVERRIDE;
     61 
     62   InstantLoader loader_;
     63   InstantNTPPrerenderer* const ntp_prerenderer_;
     64 
     65   DISALLOW_COPY_AND_ASSIGN(InstantNTP);
     66 };
     67 
     68 #endif  // CHROME_BROWSER_UI_SEARCH_INSTANT_NTP_H_
     69