c6372b4b7a7c62f43ebc2fa00a0643988da166af
[platform/framework/web/crosswalk.git] / src / chrome / browser / history / history_tab_helper.h
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_