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