blob: 20e82264f706b67234e852aaa2009c9322cdc449 [file] [log] [blame]
// 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_