summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/app/nibs/Preferences.xib10
-rw-r--r--chrome/app/policy/policy_templates.json16
-rw-r--r--chrome/browser/browser_process_impl.cc16
-rw-r--r--chrome/browser/dom_ui/options/browser_options_handler.cc20
-rw-r--r--chrome/browser/dom_ui/options/browser_options_handler.h6
-rw-r--r--chrome/browser/first_run/first_run.cc20
-rw-r--r--chrome/browser/policy/configuration_policy_pref_store.cc4
-rw-r--r--chrome/browser/policy/managed_prefs_banner_base.cc3
-rw-r--r--chrome/browser/shell_integration.cc4
-rw-r--r--chrome/browser/shell_integration.h3
-rw-r--r--chrome/browser/ui/browser_init.cc14
-rw-r--r--chrome/browser/ui/cocoa/options/preferences_window_controller.h1
-rw-r--r--chrome/browser/ui/cocoa/options/preferences_window_controller.mm36
-rw-r--r--chrome/browser/ui/gtk/options/general_page_gtk.cc17
-rw-r--r--chrome/browser/ui/gtk/options/general_page_gtk.h1
-rw-r--r--chrome/browser/ui/views/options/general_page_view.cc17
-rw-r--r--chrome/browser/ui/views/options/general_page_view.h1
-rw-r--r--chrome/common/pref_names.cc5
-rw-r--r--chrome/common/pref_names.h1
19 files changed, 164 insertions, 31 deletions
diff --git a/chrome/app/nibs/Preferences.xib b/chrome/app/nibs/Preferences.xib
index b0e9a81..0e570ba 100644
--- a/chrome/app/nibs/Preferences.xib
+++ b/chrome/app/nibs/Preferences.xib
@@ -2574,19 +2574,15 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
- <string key="label">enabled: isDefaultBrowser</string>
+ <string key="label">enabled: canChangeDefaultBrowser</string>
<reference key="source" ref="192681043"/>
<reference key="destination" ref="1001"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="192681043"/>
<reference key="NSDestination" ref="1001"/>
- <string key="NSLabel">enabled: isDefaultBrowser</string>
+ <string key="NSLabel">enabled: canChangeDefaultBrowser</string>
<string key="NSBinding">enabled</string>
- <string key="NSKeyPath">isDefaultBrowser</string>
- <object class="NSDictionary" key="NSOptions">
- <string key="NS.key.0">NSValueTransformerName</string>
- <string key="NS.object.0">NSNegateBoolean</string>
- </object>
+ <string key="NSKeyPath">canChangeDefaultBrowser</string>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
diff --git a/chrome/app/policy/policy_templates.json b/chrome/app/policy/policy_templates.json
index c1165de..f93a4f4 100644
--- a/chrome/app/policy/policy_templates.json
+++ b/chrome/app/policy/policy_templates.json
@@ -129,6 +129,22 @@
],
},
{
+ 'name': 'DefaultBrowserSettingEnabled',
+ 'type': 'main',
+ 'supported_on': ['chrome.*:11-'],
+ 'features': {'dynamic_refresh': 1},
+ 'example_value': True,
+ 'caption': '''Set Chrome as Default Browser''',
+ 'desc': '''Configures the default browser checks in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> and prevents users from changing them.
+
+ If you enable this setting, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will always check on startup whether it is the default browser and automatically register itself if possible.
+
+ If this setting is disabled, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will never check if it is the default browser and will disable user controls for setting this option.
+
+ If this setting is not set, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will allow the user to control whether it is the default browser and whether user notifications should be shown when it isn't.''',
+ 'label': '''Set Chrome as Default Browser''',
+ },
+ {
'name': 'ApplicationLocaleValue',
'type': 'string',
'supported_on': ['chrome.win:8-'],
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index 849ac7d..90ea85c 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -48,6 +48,7 @@
#include "chrome/browser/renderer_host/resource_dispatcher_host.h"
#include "chrome/browser/safe_browsing/client_side_detection_service.h"
#include "chrome/browser/safe_browsing/safe_browsing_service.h"
+#include "chrome/browser/shell_integration.h"
#include "chrome/browser/sidebar/sidebar_manager.h"
#include "chrome/browser/tab_closeable_state_watcher.h"
#include "chrome/common/chrome_constants.h"
@@ -566,6 +567,12 @@ void BrowserProcessImpl::Observe(NotificationType type,
plugin_data_remover_->StartRemoving(base::Time());
}
}
+ } else if (type == NotificationType::PREF_CHANGED) {
+ std::string* pref = Details<std::string>(details).ptr();
+ if (*pref == prefs::kDefaultBrowserSettingEnabled) {
+ if (local_state_->GetBoolean(prefs::kDefaultBrowserSettingEnabled))
+ ShellIntegration::SetAsDefaultBrowser();
+ }
} else {
NOTREACHED();
}
@@ -742,6 +749,15 @@ void BrowserProcessImpl::CreateLocalState() {
print_job_manager_->set_printing_enabled(printing_enabled);
pref_change_registrar_.Add(prefs::kPrintingEnabled,
print_job_manager_.get());
+
+ // Initialize the notification for the default browser setting policy.
+ local_state_->RegisterBooleanPref(prefs::kDefaultBrowserSettingEnabled,
+ false);
+ if (local_state_->IsManagedPreference(prefs::kDefaultBrowserSettingEnabled)) {
+ if (local_state_->GetBoolean(prefs::kDefaultBrowserSettingEnabled))
+ ShellIntegration::SetAsDefaultBrowser();
+ }
+ pref_change_registrar_.Add(prefs::kDefaultBrowserSettingEnabled, this);
}
void BrowserProcessImpl::CreateIconManager() {
diff --git a/chrome/browser/dom_ui/options/browser_options_handler.cc b/chrome/browser/dom_ui/options/browser_options_handler.cc
index cb14dd5..bb8a1e4 100644
--- a/chrome/browser/dom_ui/options/browser_options_handler.cc
+++ b/chrome/browser/dom_ui/options/browser_options_handler.cc
@@ -10,6 +10,7 @@
#include "base/string_number_conversions.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
+#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_thread.h"
#include "chrome/browser/custom_home_pages_table_model.h"
#include "chrome/browser/dom_ui/dom_ui_favicon_source.h"
@@ -133,6 +134,9 @@ void BrowserOptionsHandler::Initialize() {
make_scoped_refptr(new DOMUIFavIconSource(profile))));
homepage_.Init(prefs::kHomePage, profile->GetPrefs(), NULL);
+ default_browser_policy_.Init(prefs::kDefaultBrowserSettingEnabled,
+ g_browser_process->local_state(),
+ this);
UpdateDefaultBrowserState();
UpdateStartupPages();
UpdateSearchEngines();
@@ -187,6 +191,11 @@ void BrowserOptionsHandler::UpdateDefaultBrowserState() {
}
void BrowserOptionsHandler::BecomeDefaultBrowser(const ListValue* args) {
+ // If the default browser setting is managed then we should not be able to
+ // call this function.
+ if (default_browser_policy_.IsManaged())
+ return;
+
UserMetricsRecordAction(UserMetricsAction("Options_SetAsDefaultBrowser"));
#if defined(OS_MACOSX)
if (ShellIntegration::SetAsDefaultBrowser())
@@ -230,8 +239,9 @@ void BrowserOptionsHandler::SetDefaultBrowserUIString(int status_string_id) {
status_string_id == IDS_OPTIONS_DEFAULTBROWSER_DEFAULT));
scoped_ptr<Value> can_be_default(Value::CreateBooleanValue(
- status_string_id == IDS_OPTIONS_DEFAULTBROWSER_DEFAULT ||
- status_string_id == IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT));
+ !default_browser_policy_.IsManaged() &&
+ (status_string_id == IDS_OPTIONS_DEFAULTBROWSER_DEFAULT ||
+ status_string_id == IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT)));
dom_ui_->CallJavascriptFunction(
L"BrowserOptions.updateDefaultBrowserState",
@@ -333,6 +343,12 @@ void BrowserOptionsHandler::OnItemsRemoved(int start, int length) {
OnModelChanged();
}
+void BrowserOptionsHandler::Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ UpdateDefaultBrowserState();
+}
+
void BrowserOptionsHandler::SetStartupPagesToCurrentPages(
const ListValue* args) {
startup_custom_pages_table_model_->SetToCurrentlyOpenPages();
diff --git a/chrome/browser/dom_ui/options/browser_options_handler.h b/chrome/browser/dom_ui/options/browser_options_handler.h
index e15ef31..bf753b8 100644
--- a/chrome/browser/dom_ui/options/browser_options_handler.h
+++ b/chrome/browser/dom_ui/options/browser_options_handler.h
@@ -46,6 +46,11 @@ class BrowserOptionsHandler : public OptionsPageUIHandler,
virtual void OnItemsRemoved(int start, int length);
private:
+ // NotificationObserver implementation.
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details);
+
// Sets the home page to the given string. Called from DOMUI.
void SetHomePage(const ListValue* args);
@@ -91,6 +96,7 @@ class BrowserOptionsHandler : public OptionsPageUIHandler,
scoped_refptr<ShellIntegration::DefaultBrowserWorker> default_browser_worker_;
StringPrefMember homepage_;
+ BooleanPrefMember default_browser_policy_;
TemplateURLModel* template_url_model_; // Weak.
diff --git a/chrome/browser/first_run/first_run.cc b/chrome/browser/first_run/first_run.cc
index 4235a8a..5b7033e 100644
--- a/chrome/browser/first_run/first_run.cc
+++ b/chrome/browser/first_run/first_run.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
@@ -301,10 +301,20 @@ bool FirstRun::ProcessMasterPreferences(const FilePath& user_data_dir,
}
#endif
- if (prefs.GetBool(
- installer::master_preferences::kMakeChromeDefaultForUser,
- &value) && value) {
- ShellIntegration::SetAsDefaultBrowser();
+ // Even on the first run we only allow for the user choice to take effect if
+ // no policy has been set by the admin.
+ if (!g_browser_process->local_state()->IsManagedPreference(
+ prefs::kDefaultBrowserSettingEnabled)) {
+ if (prefs.GetBool(
+ installer::master_preferences::kMakeChromeDefaultForUser,
+ &value) && value) {
+ ShellIntegration::SetAsDefaultBrowser();
+ }
+ } else {
+ if (g_browser_process->local_state()->GetBoolean(
+ prefs::kDefaultBrowserSettingEnabled)) {
+ ShellIntegration::SetAsDefaultBrowser();
+ }
}
return false;
diff --git a/chrome/browser/policy/configuration_policy_pref_store.cc b/chrome/browser/policy/configuration_policy_pref_store.cc
index 851ae68..b19b3a1 100644
--- a/chrome/browser/policy/configuration_policy_pref_store.cc
+++ b/chrome/browser/policy/configuration_policy_pref_store.cc
@@ -227,6 +227,8 @@ const ConfigurationPolicyPrefKeeper::PolicyToPreferenceMapEntry
prefs::kDisable3DAPIs },
{ Value::TYPE_INTEGER, kPolicyPolicyRefreshRate,
prefs::kPolicyRefreshRate },
+ { Value::TYPE_BOOLEAN, kPolicyDefaultBrowserSettingEnabled,
+ prefs::kDefaultBrowserSettingEnabled },
#if defined(OS_CHROMEOS)
{ Value::TYPE_BOOLEAN, kPolicyChromeOsLockOnIdleSuspend,
@@ -841,6 +843,8 @@ ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList() {
key::kDisable3DAPIs },
{ kPolicyPolicyRefreshRate, Value::TYPE_INTEGER,
key::kPolicyRefreshRate },
+ { kPolicyDefaultBrowserSettingEnabled, Value::TYPE_BOOLEAN,
+ key::kDefaultBrowserSettingEnabled },
#if defined(OS_CHROMEOS)
{ kPolicyChromeOsLockOnIdleSuspend, Value::TYPE_BOOLEAN,
diff --git a/chrome/browser/policy/managed_prefs_banner_base.cc b/chrome/browser/policy/managed_prefs_banner_base.cc
index 826f453..2693054 100644
--- a/chrome/browser/policy/managed_prefs_banner_base.cc
+++ b/chrome/browser/policy/managed_prefs_banner_base.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
@@ -67,6 +67,7 @@ void ManagedPrefsBannerBase::Init(PrefService* local_state,
AddUserPref(prefs::kDefaultSearchProviderSuggestURL);
AddUserPref(prefs::kDefaultSearchProviderIconURL);
AddUserPref(prefs::kDefaultSearchProviderEncodings);
+ AddLocalStatePref(prefs::kDefaultBrowserSettingEnabled);
break;
case OPTIONS_PAGE_CONTENT:
AddUserPref(prefs::kSyncManaged);
diff --git a/chrome/browser/shell_integration.cc b/chrome/browser/shell_integration.cc
index 9227c56..ad0106d 100644
--- a/chrome/browser/shell_integration.cc
+++ b/chrome/browser/shell_integration.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
@@ -10,8 +10,10 @@
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/browser_thread.h"
+#include "chrome/browser/prefs/pref_service.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/pref_names.h"
ShellIntegration::ShortcutInfo::ShortcutInfo()
: create_on_desktop(false),
diff --git a/chrome/browser/shell_integration.h b/chrome/browser/shell_integration.h
index b9c6530..6caed57 100644
--- a/chrome/browser/shell_integration.h
+++ b/chrome/browser/shell_integration.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
@@ -15,6 +15,7 @@
#include "third_party/skia/include/core/SkBitmap.h"
class FilePath;
+class PrefService;
#if defined(USE_X11)
namespace base {
diff --git a/chrome/browser/ui/browser_init.cc b/chrome/browser/ui/browser_init.cc
index be770c8..8df358f 100644
--- a/chrome/browser/ui/browser_init.cc
+++ b/chrome/browser/ui/browser_init.cc
@@ -1055,10 +1055,24 @@ void BrowserInit::LaunchWithProfile::CheckDefaultBrowser(Profile* profile) {
// We do not check if we are the default browser if:
// - the user said "don't ask me again" on the infobar earlier.
// - this is the first launch after the first run flow.
+ // - There is a policy in control of this setting.
if (!profile->GetPrefs()->GetBoolean(prefs::kCheckDefaultBrowser) ||
FirstRun::IsChromeFirstRun()) {
return;
}
+ if (g_browser_process->local_state()->IsManagedPreference(
+ prefs::kDefaultBrowserSettingEnabled)) {
+ if (g_browser_process->local_state()->GetBoolean(
+ prefs::kDefaultBrowserSettingEnabled)) {
+ BrowserThread::PostTask(
+ BrowserThread::FILE, FROM_HERE, NewRunnableFunction(
+ &ShellIntegration::SetAsDefaultBrowser));
+ } else {
+ // TODO(pastarmovj): We can't really do anything meaningful here yet but
+ // just prevent showing the infobar.
+ }
+ return;
+ }
BrowserThread::PostTask(
BrowserThread::FILE, FROM_HERE, new CheckDefaultBrowserTask());
}
diff --git a/chrome/browser/ui/cocoa/options/preferences_window_controller.h b/chrome/browser/ui/cocoa/options/preferences_window_controller.h
index 494ac79..3815beb 100644
--- a/chrome/browser/ui/cocoa/options/preferences_window_controller.h
+++ b/chrome/browser/ui/cocoa/options/preferences_window_controller.h
@@ -92,6 +92,7 @@ class ProfileSyncService;
BooleanPrefMember instantEnabled_;
IBOutlet NSButton* instantCheckbox_;
scoped_nsobject<SearchEngineListModel> searchEngineModel_;
+ BooleanPrefMember default_browser_policy_;
// Used when creating a new home page url to make the new cell editable.
BOOL pendingSelectForEdit_;
BOOL restoreButtonsEnabled_;
diff --git a/chrome/browser/ui/cocoa/options/preferences_window_controller.mm b/chrome/browser/ui/cocoa/options/preferences_window_controller.mm
index d106d4b..e5332b6 100644
--- a/chrome/browser/ui/cocoa/options/preferences_window_controller.mm
+++ b/chrome/browser/ui/cocoa/options/preferences_window_controller.mm
@@ -406,6 +406,7 @@ CGFloat AutoSizeUnderTheHoodContent(NSView* view,
// KVC getter methods.
- (BOOL)fileHandlerUIEnabled;
+- (BOOL)canChangeDefaultBrowser;
@end
namespace PreferencesWindowControllerInternal {
@@ -831,6 +832,13 @@ class ManagedPrefsBannerState : public policy::ManagedPrefsBannerBase {
- (void)registerPrefObservers {
if (!prefs_) return;
+ // During unit tests, there is no local state object, so we fall back to
+ // the prefs object (where we've explicitly registered this pref so we
+ // know it's there).
+ PrefService* local = g_browser_process->local_state();
+ if (!local)
+ local = prefs_;
+
// Basics panel
registrar_.Init(prefs_);
registrar_.Add(prefs::kURLsToRestoreOnStartup, observer_.get());
@@ -840,6 +848,8 @@ class ManagedPrefsBannerState : public policy::ManagedPrefsBannerBase {
homepage_.Init(prefs::kHomePage, prefs_, observer_.get());
showHomeButton_.Init(prefs::kShowHomeButton, prefs_, observer_.get());
instantEnabled_.Init(prefs::kInstantEnabled, prefs_, observer_.get());
+ default_browser_policy_.Init(prefs::kDefaultBrowserSettingEnabled,
+ local, observer_.get());
// Personal Stuff panel
askSavePasswords_.Init(prefs::kPasswordManagerEnabled,
@@ -858,12 +868,6 @@ class ManagedPrefsBannerState : public policy::ManagedPrefsBannerBase {
translateEnabled_.Init(prefs::kEnableTranslate, prefs_, observer_.get());
tabsToLinks_.Init(prefs::kWebkitTabsToLinks, prefs_, observer_.get());
- // During unit tests, there is no local state object, so we fall back to
- // the prefs object (where we've explicitly registered this pref so we
- // know it's there).
- PrefService* local = g_browser_process->local_state();
- if (!local)
- local = prefs_;
metricsReporting_.Init(prefs::kMetricsReportingEnabled,
local, observer_.get());
defaultDownloadLocation_.Init(prefs::kDownloadDefaultDirectory, prefs_,
@@ -911,7 +915,7 @@ class ManagedPrefsBannerState : public policy::ManagedPrefsBannerBase {
paths = [paths setByAddingObject:@"homepageURL"];
} else if ([key isEqualToString:@"hompageURL"]) {
paths = [paths setByAddingObject:@"newTabPageIsHomePageIndex"];
- } else if ([key isEqualToString:@"isDefaultBrowser"]) {
+ } else if ([key isEqualToString:@"canChangeDefaultBrowser"]) {
paths = [paths setByAddingObject:@"defaultBrowser"];
} else if ([key isEqualToString:@"defaultBrowserTextColor"]) {
paths = [paths setByAddingObject:@"defaultBrowser"];
@@ -978,6 +982,9 @@ class ManagedPrefsBannerState : public policy::ManagedPrefsBannerBase {
[self setShowHomeButtonEnabled:!showHomeButton_.IsManaged()];
} else if (*prefName == prefs::kInstantEnabled) {
[self configureInstant];
+ } else if (*prefName == prefs::kDefaultBrowserSettingEnabled) {
+ [self willChangeValueForKey:@"defaultBrowser"];
+ [self didChangeValueForKey:@"defaultBrowser"];
}
}
@@ -1264,15 +1271,19 @@ enum { kHomepageNewTabPage, kHomepageURL };
[self didChangeValueForKey:@"defaultBrowser"];
}
-// Returns the Chromium default browser state.
-- (ShellIntegration::DefaultBrowserState)isDefaultBrowser {
- return ShellIntegration::IsDefaultBrowser();
+// Returns the Chromium default browser state and whether this is user
+// controlled or locked by a policy.
+- (BOOL)canChangeDefaultBrowser {
+ return !default_browser_policy_.IsManaged() &&
+ ShellIntegration::IsDefaultBrowser() !=
+ ShellIntegration::IS_DEFAULT_BROWSER;
}
// Returns the text color of the "chromium is your default browser" text (green
// for yes, red for no).
- (NSColor*)defaultBrowserTextColor {
- ShellIntegration::DefaultBrowserState state = [self isDefaultBrowser];
+ ShellIntegration::DefaultBrowserState state =
+ ShellIntegration::IsDefaultBrowser();
return (state == ShellIntegration::IS_DEFAULT_BROWSER) ?
[NSColor colorWithCalibratedRed:0.0 green:135.0/255.0 blue:0 alpha:1.0] :
[NSColor colorWithCalibratedRed:135.0/255.0 green:0 blue:0 alpha:1.0];
@@ -1281,7 +1292,8 @@ enum { kHomepageNewTabPage, kHomepageURL };
// Returns the text for the "chromium is your default browser" string dependent
// on if Chromium actually is or not.
- (NSString*)defaultBrowserText {
- ShellIntegration::DefaultBrowserState state = [self isDefaultBrowser];
+ ShellIntegration::DefaultBrowserState state =
+ ShellIntegration::IsDefaultBrowser();
int stringId;
if (state == ShellIntegration::IS_DEFAULT_BROWSER)
stringId = IDS_OPTIONS_DEFAULTBROWSER_DEFAULT;
diff --git a/chrome/browser/ui/gtk/options/general_page_gtk.cc b/chrome/browser/ui/gtk/options/general_page_gtk.cc
index a398850..0f552ff 100644
--- a/chrome/browser/ui/gtk/options/general_page_gtk.cc
+++ b/chrome/browser/ui/gtk/options/general_page_gtk.cc
@@ -10,6 +10,7 @@
#include "base/callback.h"
#include "base/command_line.h"
#include "base/utf_string_conversions.h"
+#include "chrome/browser/browser_process.h"
#include "chrome/browser/custom_home_pages_table_model.h"
#include "chrome/browser/instant/instant_confirm_dialog.h"
#include "chrome/browser/instant/instant_controller.h"
@@ -108,6 +109,10 @@ GeneralPageGtk::GeneralPageGtk(Profile* profile)
homepage_.Init(prefs::kHomePage, profile->GetPrefs(), this);
show_home_button_.Init(prefs::kShowHomeButton, profile->GetPrefs(), this);
+ default_browser_policy_.Init(prefs::kDefaultBrowserSettingEnabled,
+ g_browser_process->local_state(),
+ this);
+
instant_.Init(prefs::kInstantEnabled, profile->GetPrefs(), this);
// Load initial values
@@ -203,6 +208,15 @@ void GeneralPageGtk::NotifyPrefChanged(const std::string* pref_name) {
GTK_TOGGLE_BUTTON(instant_checkbox_), instant_.GetValue());
}
+ if (!pref_name || *pref_name == prefs::kDefaultBrowserSettingEnabled) {
+ // If the option is managed the UI is uncondionally disabled otherwise we
+ // restart the standard button enabling logic.
+ if (default_browser_policy_.IsManaged())
+ gtk_widget_set_sensitive(default_browser_use_as_default_button_, false);
+ else
+ default_browser_worker_->StartCheckDefaultBrowser();
+ }
+
initializing_ = false;
}
@@ -788,7 +802,8 @@ void GeneralPageGtk::SetDefaultBrowserUIState(
}
gtk_widget_set_sensitive(default_browser_use_as_default_button_,
- state == ShellIntegration::STATE_NOT_DEFAULT);
+ state == ShellIntegration::STATE_NOT_DEFAULT &&
+ !default_browser_policy_.IsManaged());
}
void GeneralPageGtk::OnInstantLabelSizeAllocate(GtkWidget* sender,
diff --git a/chrome/browser/ui/gtk/options/general_page_gtk.h b/chrome/browser/ui/gtk/options/general_page_gtk.h
index 9e41e50..0584486 100644
--- a/chrome/browser/ui/gtk/options/general_page_gtk.h
+++ b/chrome/browser/ui/gtk/options/general_page_gtk.h
@@ -151,6 +151,7 @@ class GeneralPageGtk : public OptionsPageBase,
// Widgets of the default browser group
GtkWidget* default_browser_status_label_;
GtkWidget* default_browser_use_as_default_button_;
+ BooleanPrefMember default_browser_policy_;
// The parent GtkTable widget
GtkWidget* page_;
diff --git a/chrome/browser/ui/views/options/general_page_view.cc b/chrome/browser/ui/views/options/general_page_view.cc
index 43664e4..71f9b3b 100644
--- a/chrome/browser/ui/views/options/general_page_view.cc
+++ b/chrome/browser/ui/views/options/general_page_view.cc
@@ -13,6 +13,7 @@
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/browser_window.h"
+#include "chrome/browser/browser_process.h"
#include "chrome/browser/custom_home_pages_table_model.h"
#include "chrome/browser/dom_ui/new_tab_ui.h"
#include "chrome/browser/instant/instant_confirm_dialog.h"
@@ -382,6 +383,9 @@ void GeneralPageView::InitControlLayout() {
profile()->GetPrefs(), this);
homepage_.Init(prefs::kHomePage, profile()->GetPrefs(), this);
show_home_button_.Init(prefs::kShowHomeButton, profile()->GetPrefs(), this);
+ default_browser_policy_.Init(prefs::kDefaultBrowserSettingEnabled,
+ g_browser_process->local_state(),
+ this);
}
void GeneralPageView::NotifyPrefChanged(const std::string* pref_name) {
@@ -446,6 +450,15 @@ void GeneralPageView::NotifyPrefChanged(const std::string* pref_name) {
if (!pref_name || *pref_name == prefs::kInstantEnabled)
instant_checkbox_->SetChecked(prefs->GetBoolean(prefs::kInstantEnabled));
+
+ if (!pref_name || *pref_name == prefs::kDefaultBrowserSettingEnabled) {
+ // If the option is managed the UI is uncondionally disabled otherwise we
+ // restart the standard button enabling logic.
+ if (default_browser_policy_.IsManaged())
+ default_browser_use_as_default_button_->SetEnabled(false);
+ else
+ default_browser_worker_->StartCheckDefaultBrowser();
+ }
}
void GeneralPageView::HighlightGroup(OptionsGroup highlight_group) {
@@ -463,7 +476,9 @@ void GeneralPageView::LinkActivated(views::Link* source, int event_flags) {
void GeneralPageView::SetDefaultBrowserUIState(
ShellIntegration::DefaultBrowserUIState state) {
- bool button_enabled = state == ShellIntegration::STATE_NOT_DEFAULT;
+ bool button_enabled =
+ (state == ShellIntegration::STATE_NOT_DEFAULT) &&
+ !default_browser_policy_.IsManaged();
default_browser_use_as_default_button_->SetEnabled(button_enabled);
default_browser_use_as_default_button_->SetNeedElevation(true);
if (state == ShellIntegration::STATE_IS_DEFAULT) {
diff --git a/chrome/browser/ui/views/options/general_page_view.h b/chrome/browser/ui/views/options/general_page_view.h
index 43ab638..d8f5533 100644
--- a/chrome/browser/ui/views/options/general_page_view.h
+++ b/chrome/browser/ui/views/options/general_page_view.h
@@ -160,6 +160,7 @@ class GeneralPageView : public OptionsPageView,
OptionsGroupView* default_browser_group_;
views::Label* default_browser_status_label_;
views::NativeButton* default_browser_use_as_default_button_;
+ BooleanPrefMember default_browser_policy_;
// The helper object that performs default browser set/check tasks.
scoped_refptr<ShellIntegration::DefaultBrowserWorker> default_browser_worker_;
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index 93be4ce..e709b43 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -570,6 +570,11 @@ const char kPluginsShowDetails[] = "plugins.show_details";
// on start-up.
const char kCheckDefaultBrowser[] = "browser.check_default_browser";
+// Policy setting whether default browser check should be disabled and default
+// browser registration should take place.
+const char kDefaultBrowserSettingEnabled[] =
+ "browser.default_browser_setting_enabled";
+
#if defined(OS_MACOSX)
// Boolean that indicates whether the application should show the info bar
// asking the user to set up automatic updates when Keystone promotion is
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index dc248ab..8f2094b 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -207,6 +207,7 @@ extern const char kPluginsPluginsBlacklist[];
extern const char kPluginsEnabledInternalPDF[];
extern const char kPluginsShowDetails[];
extern const char kCheckDefaultBrowser[];
+extern const char kDefaultBrowserSettingEnabled[];
#if defined(OS_MACOSX)
extern const char kShowUpdatePromotionInfoBar[];
#endif