summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorpastarmovj@chromium.org <pastarmovj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-01 12:52:56 +0000
committerpastarmovj@chromium.org <pastarmovj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-01 12:52:56 +0000
commite450fa6624812d5d27142daa79f7bbe1f3d2326a (patch)
tree5ec7c6c96e3c0c74da4b20fd9dba9f958c88068c /chrome
parentbbdd9ddbd76d7579f66ec07f5f847cf874b6d35a (diff)
downloadchromium_src-e450fa6624812d5d27142daa79f7bbe1f3d2326a.zip
chromium_src-e450fa6624812d5d27142daa79f7bbe1f3d2326a.tar.gz
chromium_src-e450fa6624812d5d27142daa79f7bbe1f3d2326a.tar.bz2
Introduced a new policy DefaultBrowserSettingEnabled.
When set it either enforces Chrome's registration as default browser, or prevents the user from seeing the reminder about Chrome not being default as well as disabled the UI for setting it as default browser. When not set the old behavior is observed. BUG=65290 TEST=Manual. Set the policy and the UI should be disabled. If set to true the browser should become default browser immediately. Review URL: http://codereview.chromium.org/6348021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@73280 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-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