| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_UI_BOOKMARKS_BOOKMARK_PROMPT_CONTROLLER_H_ |
| #define CHROME_BROWSER_UI_BOOKMARKS_BOOKMARK_PROMPT_CONTROLLER_H_ |
| |
| #include "base/basictypes.h" |
| #include "base/time/time.h" |
| #include "chrome/browser/common/cancelable_request.h" |
| #include "chrome/browser/history/history_types.h" |
| #include "chrome/browser/ui/browser_list_observer.h" |
| #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" |
| #include "content/public/browser/notification_observer.h" |
| #include "content/public/browser/notification_registrar.h" |
| #include "url/gurl.h" |
| |
| class Browser; |
| class PrefService; |
| |
| namespace content { |
| class WebContents; |
| } |
| |
| // BookmarkPromptController is a kind of singleton object held by |
| // BrowserProcessImpl, and controls showing bookmark prompt for frequently |
| // visited URLs. |
| class BookmarkPromptController : public chrome::BrowserListObserver, |
| public content::NotificationObserver, |
| public TabStripModelObserver { |
| public: |
| // When impression count is greater than |kMaxPromptImpressionCount|, we |
| // don't display bookmark prompt anymore. |
| static const int kMaxPromptImpressionCount; |
| |
| // When user visited the URL 10 times, we show the bookmark prompt. |
| static const int kVisitCountForPermanentTrigger; |
| |
| // When user visited the URL 3 times last 24 hours, we show the bookmark |
| // prompt. |
| static const int kVisitCountForSessionTrigger; |
| |
| // An instance of BookmarkPromptController is constructed only if bookmark |
| // feature enabled. |
| BookmarkPromptController(); |
| virtual ~BookmarkPromptController(); |
| |
| // Invoked when bookmark is added for |url| by clicking star icon in |
| // |browser|. Note: Clicking bookmark menu item in action box is also |
| // considered as clicking star icon. |
| static void AddedBookmark(Browser* browser, const GURL& url); |
| |
| // Invoked when bookmark prompt is closing. |
| static void ClosingBookmarkPrompt(); |
| |
| // Disable bookmark prompt feature in a profile in |prefs|. |
| static void DisableBookmarkPrompt(PrefService* prefs); |
| |
| // True if bookmark prompt feature is enabled, otherwise false. |
| static bool IsEnabled(); |
| |
| private: |
| // TabStripModelObserver |
| virtual void ActiveTabChanged(content::WebContents* old_contents, |
| content::WebContents* new_contents, |
| int index, |
| int reason) OVERRIDE; |
| |
| void AddedBookmarkInternal(Browser* browser, const GURL& url); |
| void ClosingBookmarkPromptInternal(); |
| |
| // content::NotificationObserver: |
| virtual void Observe(int type, |
| const content::NotificationSource& source, |
| const content::NotificationDetails& details) OVERRIDE; |
| |
| // chrome::BrowserListObserver |
| virtual void OnBrowserRemoved(Browser* browser) OVERRIDE; |
| virtual void OnBrowserSetLastActive(Browser* browser) OVERRIDE; |
| |
| // Callback for the HistoryService::QueryURL |
| void OnDidQueryURL(CancelableRequestProvider::Handle handle, |
| bool success, |
| const history::URLRow* url_row, |
| history::VisitVector* visits); |
| |
| // Set current active browser cache to |browser|. |browser| can be null. |
| void SetBrowser(Browser* browser); |
| |
| // Set current active WebContents cache from |web_contents|. |web_contents| |
| // can be null. |
| void SetWebContents(content::WebContents* web_contents); |
| |
| // Current active browser cache which we will display the prompt on it. |
| Browser* browser_; |
| |
| // Current active WebContents cache which we will display the prompt for it. |
| content::WebContents* web_contents_; |
| |
| // Remember last URL for recording metrics. |
| GURL last_prompted_url_; |
| |
| // Last prompted time is used for measuring duration of prompt displaying |
| // time. |
| base::Time last_prompted_time_; |
| |
| // Start time of HistoryService::QueryURL. |
| base::Time query_url_start_time_; |
| |
| CancelableRequestConsumer query_url_consumer_; |
| content::NotificationRegistrar registrar_; |
| |
| DISALLOW_COPY_AND_ASSIGN(BookmarkPromptController); |
| }; |
| |
| #endif // CHROME_BROWSER_UI_BOOKMARKS_BOOKMARK_PROMPT_CONTROLLER_H_ |