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

Unified Diff: chrome/browser/shell_integration.cc

Issue 1832853003: DefaultBrowserWorker now fully supports opening the settings for Win10 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix mac compilation Created 4 years, 8 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
« no previous file with comments | « chrome/browser/shell_integration.h ('k') | chrome/browser/shell_integration_android.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/shell_integration.cc
diff --git a/chrome/browser/shell_integration.cc b/chrome/browser/shell_integration.cc
index 43b6dbc0f7b12996f3932b5154e54771661f3e3d..ca8157b6cf415eed6dd845d89fedbbc273b51f16 100644
--- a/chrome/browser/shell_integration.cc
+++ b/chrome/browser/shell_integration.cc
@@ -24,6 +24,11 @@
#include "chromeos/chromeos_switches.h"
#endif
+#if defined(OS_WIN)
+#include "base/win/windows_version.h"
+#include "chrome/browser/shell_integration_win.h"
+#endif
+
#if !defined(OS_WIN)
#include "chrome/common/channel_info.h"
#include "chrome/grit/chromium_strings.h"
@@ -40,20 +45,8 @@ const struct AppModeInfo* gAppModeInfo = nullptr;
} // namespace
-#if !defined(OS_WIN)
-bool SetAsDefaultBrowserInteractive() {
- return false;
-}
-
-bool SetAsDefaultProtocolClientInteractive(const std::string& protocol) {
- return false;
-}
-#endif // !defined(OS_WIN)
-
-DefaultWebClientSetPermission CanSetAsDefaultProtocolClient() {
- // Allowed as long as the browser can become the operating system default
- // browser.
- return CanSetAsDefaultBrowser();
+bool CanSetAsDefaultBrowser() {
+ return GetDefaultWebClientSetPermission() != SET_DEFAULT_NOT_ALLOWED;
}
#if !defined(OS_WIN)
@@ -187,8 +180,10 @@ void DefaultWebClientWorker::CheckIsDefault(bool is_following_set_as_default) {
void DefaultWebClientWorker::SetAsDefault() {
DCHECK_CURRENTLY_ON(BrowserThread::FILE);
- SetAsDefaultImpl();
- CheckIsDefault(true);
+
+ // SetAsDefaultImpl will make sure the callback is executed exactly once.
+ SetAsDefaultImpl(
+ base::Bind(&DefaultWebClientWorker::CheckIsDefault, this, true));
}
void DefaultWebClientWorker::ReportSetDefaultResult(
@@ -237,8 +232,9 @@ DefaultWebClientState DefaultBrowserWorker::CheckIsDefaultImpl() {
return GetDefaultBrowser();
}
-void DefaultBrowserWorker::SetAsDefaultImpl() {
- switch (CanSetAsDefaultBrowser()) {
+void DefaultBrowserWorker::SetAsDefaultImpl(
+ const base::Closure& on_finished_callback) {
+ switch (GetDefaultWebClientSetPermission()) {
case SET_DEFAULT_NOT_ALLOWED:
NOTREACHED();
break;
@@ -246,10 +242,21 @@ void DefaultBrowserWorker::SetAsDefaultImpl() {
SetAsDefaultBrowser();
break;
case SET_DEFAULT_INTERACTIVE:
- if (interactive_permitted_)
- SetAsDefaultBrowserInteractive();
+#if defined(OS_WIN)
+ if (interactive_permitted_) {
+ // The Windows 8 API for choosing the default browser was deprecated on
+ // Windows 10.
+ if (base::win::GetVersion() >= base::win::VERSION_WIN10) {
+ win::SetAsDefaultBrowserUsingSystemSettings(on_finished_callback);
+ return;
+ } else {
grt (UTC plus 2) 2016/04/12 13:36:44 nit for the future: omit "else" when the "if" clau
+ win::SetAsDefaultBrowserUsingIntentPicker();
+ }
+ }
+#endif // defined(OS_WIN)
break;
}
+ on_finished_callback.Run();
}
///////////////////////////////////////////////////////////////////////////////
@@ -274,8 +281,9 @@ DefaultWebClientState DefaultProtocolClientWorker::CheckIsDefaultImpl() {
return IsDefaultProtocolClient(protocol_);
}
-void DefaultProtocolClientWorker::SetAsDefaultImpl() {
- switch (CanSetAsDefaultProtocolClient()) {
+void DefaultProtocolClientWorker::SetAsDefaultImpl(
+ const base::Closure& on_finished_callback) {
+ switch (GetDefaultWebClientSetPermission()) {
case SET_DEFAULT_NOT_ALLOWED:
// Not allowed, do nothing.
break;
@@ -283,11 +291,14 @@ void DefaultProtocolClientWorker::SetAsDefaultImpl() {
SetAsDefaultProtocolClient(protocol_);
break;
case SET_DEFAULT_INTERACTIVE:
- if (interactive_permitted_) {
- SetAsDefaultProtocolClientInteractive(protocol_);
- }
+#if defined(OS_WIN)
+ // TODO(pmonette): Implement a working flow for Windows 10.
+ if (interactive_permitted_)
+ win::SetAsDefaultProtocolClientUsingIntentPicker(protocol_);
+#endif // defined(OS_WIN)
break;
}
+ on_finished_callback.Run();
}
} // namespace shell_integration
« no previous file with comments | « chrome/browser/shell_integration.h ('k') | chrome/browser/shell_integration_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698