Home | History | Annotate | Download | only in history
      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 CHROME_BROWSER_HISTORY_HISTORY_TAB_HELPER_H_
      6 #define CHROME_BROWSER_HISTORY_HISTORY_TAB_HELPER_H_
      7 
      8 #include "base/memory/ref_counted.h"
      9 #include "base/time/time.h"
     10 #include "content/public/browser/web_contents_observer.h"
     11 #include "content/public/browser/web_contents_user_data.h"
     12 
     13 class HistoryService;
     14 
     15 namespace history {
     16 struct HistoryAddPageArgs;
     17 }
     18 
     19 class HistoryTabHelper : public content::WebContentsObserver,
     20                          public content::WebContentsUserData<HistoryTabHelper> {
     21  public:
     22   virtual ~HistoryTabHelper();
     23 
     24   // Updates history with the specified navigation. This is called by
     25   // OnMsgNavigate to update history state.
     26   void UpdateHistoryForNavigation(
     27       const history::HistoryAddPageArgs& add_page_args);
     28 
     29   // Sends the page title to the history service. This is called when we receive
     30   // the page title and we know we want to update history.
     31   void UpdateHistoryPageTitle(const content::NavigationEntry& entry);
     32 
     33   // Returns the history::HistoryAddPageArgs to use for adding a page to
     34   // history.
     35   history::HistoryAddPageArgs CreateHistoryAddPageArgs(
     36       const GURL& virtual_url,
     37       base::Time timestamp,
     38       bool did_replace_entry,
     39       const content::FrameNavigateParams& params);
     40 
     41  private:
     42   explicit HistoryTabHelper(content::WebContents* web_contents);
     43   friend class content::WebContentsUserData<HistoryTabHelper>;
     44 
     45   // content::WebContentsObserver implementation.
     46   virtual void DidNavigateMainFrame(
     47       const content::LoadCommittedDetails& details,
     48       const content::FrameNavigateParams& params) OVERRIDE;
     49   virtual void DidNavigateAnyFrame(
     50       const content::LoadCommittedDetails& details,
     51       const content::FrameNavigateParams& params) OVERRIDE;
     52   virtual void TitleWasSet(content::NavigationEntry* entry,
     53                            bool explicit_set) OVERRIDE;
     54   virtual void WebContentsDestroyed() OVERRIDE;
     55 
     56   // Helper function to return the history service.  May return NULL.
     57   HistoryService* GetHistoryService();
     58 
     59   // Whether we have a (non-empty) title for the current page.
     60   // Used to prevent subsequent title updates from affecting history. This
     61   // prevents some weirdness because some AJAXy apps use titles for status
     62   // messages.
     63   bool received_page_title_;
     64 
     65   DISALLOW_COPY_AND_ASSIGN(HistoryTabHelper);
     66 };
     67 
     68 #endif  // CHROME_BROWSER_HISTORY_HISTORY_TAB_HELPER_H_
     69