Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(569)

Unified Diff: chrome/browser/jumplist_win.cc

Issue 549953003: Hide "New incognito window" from jump list if disabled by policy. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« chrome/browser/jumplist_win.h ('K') | « chrome/browser/jumplist_win.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/jumplist_win.cc
diff --git a/chrome/browser/jumplist_win.cc b/chrome/browser/jumplist_win.cc
index a0881e7c1c3d30ad92dfca44f4e6c6f5a13367d4..febc779dfb318a805fd1727c5c172ef8211f6ea3 100644
--- a/chrome/browser/jumplist_win.cc
+++ b/chrome/browser/jumplist_win.cc
@@ -9,6 +9,7 @@
#include "base/command_line.h"
#include "base/files/file_util.h"
#include "base/path_service.h"
+#include "base/prefs/pref_change_registrar.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/threading/thread.h"
@@ -24,6 +25,7 @@
#include "chrome/browser/shell_integration.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h"
#include "chrome/grit/generated_resources.h"
#include "components/favicon_base/favicon_types.h"
@@ -82,7 +84,9 @@ bool CreateIconFile(const SkBitmap& bitmap,
}
// Updates the "Tasks" category of the JumpList.
-bool UpdateTaskCategory(JumpListUpdater* jumplist_updater) {
+bool UpdateTaskCategory(
+ JumpListUpdater* jumplist_updater,
+ IncognitoModePrefs::Availability incognito_availability) {
base::FilePath chrome_path;
if (!PathService::Get(base::FILE_EXE, &chrome_path))
return false;
@@ -93,24 +97,28 @@ bool UpdateTaskCategory(JumpListUpdater* jumplist_updater) {
// collection. We use our application icon as the icon for this item.
// We remove '&' characters from this string so we can share it with our
// system menu.
- scoped_refptr<ShellLinkItem> chrome = CreateShellLink();
- base::string16 chrome_title = l10n_util::GetStringUTF16(IDS_NEW_WINDOW);
- ReplaceSubstringsAfterOffset(&chrome_title, 0, L"&", L"");
- chrome->set_title(chrome_title);
- chrome->set_icon(chrome_path.value(), 0);
- items.push_back(chrome);
+ if (incognito_availability != IncognitoModePrefs::FORCED) {
+ scoped_refptr<ShellLinkItem> chrome = CreateShellLink();
+ base::string16 chrome_title = l10n_util::GetStringUTF16(IDS_NEW_WINDOW);
+ ReplaceSubstringsAfterOffset(&chrome_title, 0, L"&", L"");
+ chrome->set_title(chrome_title);
+ chrome->set_icon(chrome_path.value(), 0);
+ items.push_back(chrome);
+ }
// Create an IShellLink object which launches Chrome in incognito mode, and
// add it to the collection. We use our application icon as the icon for
// this item.
- scoped_refptr<ShellLinkItem> incognito = CreateShellLink();
- incognito->GetCommandLine()->AppendSwitch(switches::kIncognito);
- base::string16 incognito_title =
- l10n_util::GetStringUTF16(IDS_NEW_INCOGNITO_WINDOW);
- ReplaceSubstringsAfterOffset(&incognito_title, 0, L"&", L"");
- incognito->set_title(incognito_title);
- incognito->set_icon(chrome_path.value(), 0);
- items.push_back(incognito);
+ if (incognito_availability != IncognitoModePrefs::DISABLED) {
+ scoped_refptr<ShellLinkItem> incognito = CreateShellLink();
+ incognito->GetCommandLine()->AppendSwitch(switches::kIncognito);
+ base::string16 incognito_title =
+ l10n_util::GetStringUTF16(IDS_NEW_INCOGNITO_WINDOW);
+ ReplaceSubstringsAfterOffset(&incognito_title, 0, L"&", L"");
+ incognito->set_title(incognito_title);
+ incognito->set_icon(chrome_path.value(), 0);
+ items.push_back(incognito);
+ }
return jumplist_updater->AddTasks(items);
}
@@ -118,7 +126,8 @@ bool UpdateTaskCategory(JumpListUpdater* jumplist_updater) {
// Updates the application JumpList.
bool UpdateJumpList(const wchar_t* app_id,
const ShellLinkItemList& most_visited_pages,
- const ShellLinkItemList& recently_closed_pages) {
+ const ShellLinkItemList& recently_closed_pages,
+ IncognitoModePrefs::Availability incognito_availability) {
// JumpList is implemented only on Windows 7 or later.
// So, we should return now when this function is called on earlier versions
// of Windows.
@@ -164,7 +173,7 @@ bool UpdateJumpList(const wchar_t* app_id,
}
// Update the "Tasks" category of the JumpList.
- if (!UpdateTaskCategory(&jumplist_updater))
+ if (!UpdateTaskCategory(&jumplist_updater, incognito_availability))
return false;
// Commit this transaction and send the updated JumpList to Windows.
@@ -224,6 +233,11 @@ bool JumpList::AddObserver(Profile* profile) {
content::Source<Profile>(profile_));
}
tab_restore_service->AddObserver(this);
+ pref_change_registrar_.reset(new PrefChangeRegistrar);
+ pref_change_registrar_->Init(profile_->GetPrefs());
+ pref_change_registrar_->Add(
+ prefs::kIncognitoModeAvailability,
+ base::Bind(&JumpList::OnIncognitoAvailabilityChanged, this));
return true;
}
@@ -258,6 +272,7 @@ void JumpList::RemoveObserver() {
if (tab_restore_service)
tab_restore_service->RemoveObserver(this);
registrar_.reset();
+ pref_change_registrar_.reset();
}
profile_ = NULL;
}
@@ -384,9 +399,7 @@ void JumpList::StartLoadingFavicon() {
if (icon_urls_.empty()) {
// No more favicons are needed by the application JumpList. Schedule a
// RunUpdate call.
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- base::Bind(&JumpList::RunUpdate, this));
+ PostRunUpdate();
sky 2014/09/08 16:15:17 Is it possible to not callout like this while hold
Joao da Silva 2014/09/08 16:44:10 Done.
return;
}
// Ask FaviconService if it has a favicon of a URL.
@@ -423,7 +436,27 @@ void JumpList::OnFaviconDataAvailable(
StartLoadingFavicon();
}
-void JumpList::RunUpdate() {
+void JumpList::OnIncognitoAvailabilityChanged() {
+ base::AutoLock auto_lock(list_lock_);
sky 2014/09/08 16:15:17 Do you really need to hold the lock here?
Joao da Silva 2014/09/08 16:44:10 The header documents that |icon_urls_| is protecte
+ if (icon_urls_.empty())
+ PostRunUpdate();
+ // If |icon_urls_| isn't empty then OnFaviconDataAvailable will eventually
+ // call PostRunUpdate().
+}
+
+void JumpList::PostRunUpdate() {
+ // Check if incognito windows (or normal windows) are disabled by policy.
+ IncognitoModePrefs::Availability incognito_availability =
+ profile_ ? IncognitoModePrefs::GetAvailability(profile_->GetPrefs())
+ : IncognitoModePrefs::ENABLED;
+
+ BrowserThread::PostTask(
+ BrowserThread::FILE, FROM_HERE,
+ base::Bind(&JumpList::RunUpdate, this, incognito_availability));
+}
+
+void JumpList::RunUpdate(
+ IncognitoModePrefs::Availability incognito_availability) {
ShellLinkItemList local_most_visited_pages;
ShellLinkItemList local_recently_closed_pages;
@@ -455,11 +488,11 @@ void JumpList::RunUpdate() {
// category.
CreateIconFiles(local_recently_closed_pages);
- // We finished collecting all resources needed for updating an appliation
+ // We finished collecting all resources needed for updating an application
// JumpList. So, create a new JumpList and replace the current JumpList
// with it.
UpdateJumpList(app_id_.c_str(), local_most_visited_pages,
- local_recently_closed_pages);
+ local_recently_closed_pages, incognito_availability);
}
void JumpList::CreateIconFiles(const ShellLinkItemList& item_list) {
« chrome/browser/jumplist_win.h ('K') | « chrome/browser/jumplist_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698