Commit b943d1c8 authored by joaodasilva's avatar joaodasilva Committed by Commit bot

Hide "New incognito window" from jump list if disabled by policy.

BUG=148392

Review URL: https://codereview.chromium.org/549953003

Cr-Commit-Position: refs/heads/master@{#293850}
parent 87d125f0
This diff is collapsed.
......@@ -17,6 +17,7 @@
#include "chrome/browser/history/history_service.h"
#include "chrome/browser/history/history_types.h"
#include "chrome/browser/jumplist_updater_win.h"
#include "chrome/browser/prefs/incognito_mode_prefs.h"
#include "chrome/browser/sessions/tab_restore_service.h"
#include "chrome/browser/sessions/tab_restore_service_observer.h"
#include "content/public/browser/browser_thread.h"
......@@ -29,20 +30,20 @@ namespace content {
class NotificationRegistrar;
}
class Profile;
class PageUsageData;
class PrefChangeRegistrar;
class Profile;
// A class which implements an application JumpList.
// This class encapsulates operations required for updating an application
// JumpList:
// * Retrieving "Most Visited" pages from HistoryService;
// * Retrieving strings from the application resource;
// * Creatng COM objects used by JumpList from PageUsageData objects;
// * Creating COM objects used by JumpList from PageUsageData objects;
// * Adding COM objects to JumpList, etc.
//
// This class also implements TabRestoreServiceObserver. So, once we call
// AddObserver() and register this class as an observer, it automatically
// updates a JumpList when a tab is added or removed.
// This class observes the tabs and policies of the given Profile and updates
// the JumpList whenever a change is detected.
//
// Updating a JumpList requires some file operations and it is not good to
// update it in a UI thread. To solve this problem, this class posts to a
......@@ -55,19 +56,13 @@ class JumpList : public TabRestoreServiceObserver,
public base::RefCountedThreadSafe<
JumpList, content::BrowserThread::DeleteOnUIThread> {
public:
JumpList();
explicit JumpList(Profile* profile);
// NotificationObserver implementation.
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details);
// Registers (or unregisters) this object as an observer.
// When the TabRestoreService object notifies the tab status is changed, this
// class automatically updates an application JumpList.
bool AddObserver(Profile* profile);
void RemoveObserver();
// Observer callback for TabRestoreService::Observer to notify when a tab is
// added or removed.
virtual void TabRestoreServiceChanged(TabRestoreService* service);
......@@ -79,16 +74,21 @@ class JumpList : public TabRestoreServiceObserver,
// Cancel a pending jumplist update.
void CancelPendingUpdate();
// Terminate the jumplist: cancel any pending updates and remove observer
// from TabRestoreService. This must be called before the profile provided
// in the AddObserver method is destroyed.
// Terminate the jumplist: cancel any pending updates and stop observing
// the Profile and its services. This must be called before the |profile_|
// is destroyed.
void Terminate();
// Returns true if the custom JumpList is enabled.
// The custom jumplist works only on Windows 7 and above.
static bool Enabled();
protected:
private:
friend struct content::BrowserThread::DeleteOnThread<
content::BrowserThread::UI>;
friend class base::DeleteHelper<JumpList>;
virtual ~JumpList();
// Creates a ShellLinkItem object from a tab (or a window) and add it to the
// given list.
// These functions are copied from the RecentlyClosedTabsHandler class for
......@@ -120,20 +120,20 @@ class JumpList : public TabRestoreServiceObserver,
void OnMostVisitedURLsAvailable(
const history::MostVisitedURLList& data);
// Callback for changes to the incognito mode availability pref.
void OnIncognitoAvailabilityChanged();
// Helper for RunUpdate() that determines its parameters.
void PostRunUpdate();
// Runnable method that updates the jumplist, once all the data
// has been fetched.
void RunUpdate();
void RunUpdate(IncognitoModePrefs::Availability incognito_availability);
// Helper method for RunUpdate to create icon files for the asynchrounously
// loaded icons.
void CreateIconFiles(const ShellLinkItemList& item_list);
private:
friend struct content::BrowserThread::DeleteOnThread<
content::BrowserThread::UI>;
friend class base::DeleteHelper<JumpList>;
~JumpList();
// For callbacks may be run after destruction.
base::WeakPtrFactory<JumpList> weak_ptr_factory_;
......@@ -145,6 +145,7 @@ class JumpList : public TabRestoreServiceObserver,
// Lives on the UI thread.
scoped_ptr<content::NotificationRegistrar> registrar_;
scoped_ptr<PrefChangeRegistrar> pref_change_registrar_;
// App id to associate with the jump list.
std::wstring app_id_;
......
......@@ -2020,8 +2020,7 @@ void BrowserView::LoadingAnimationCallback() {
void BrowserView::OnLoadCompleted() {
#if defined(OS_WIN)
DCHECK(!jumplist_);
jumplist_ = new JumpList();
jumplist_->AddObserver(browser_->profile());
jumplist_ = new JumpList(browser_->profile());
#endif
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment