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

Side by Side Diff: chrome/browser/shell_integration_win.cc

Issue 1571383004: New experiment without registry deletion (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2564
Patch Set: Created 4 years, 11 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/shell_integration.h" 5 #include "chrome/browser/shell_integration.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 #include <shlwapi.h> 8 #include <shlwapi.h>
9 #include <shobjidl.h> 9 #include <shobjidl.h>
10 #include <propkey.h> // Needs to come after shobjidl.h. 10 #include <propkey.h> // Needs to come after shobjidl.h.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 #include "components/variations/variations_associated_data.h" 46 #include "components/variations/variations_associated_data.h"
47 #include "content/public/browser/browser_thread.h" 47 #include "content/public/browser/browser_thread.h"
48 48
49 using content::BrowserThread; 49 using content::BrowserThread;
50 50
51 namespace { 51 namespace {
52 52
53 const wchar_t kAppListAppNameSuffix[] = L"AppList"; 53 const wchar_t kAppListAppNameSuffix[] = L"AppList";
54 54
55 const char kAsyncSetAsDefaultExperimentName[] = "AsyncSetAsDefault"; 55 const char kAsyncSetAsDefaultExperimentName[] = "AsyncSetAsDefault";
56 // A prefix shared by multiple groups that kicks off the generic
57 // AsyncSetAsDefault experiment.
58 const char kAsyncSetAsDefaultExperimentEnabledGroupPrefix[] = "Enabled";
59 // One of the group names for the AsyncSetAsDefault experiment. Unlike other
60 // "Enabled" groups, this group doesn't reset the current default browser choice
61 // in the registry.
62 const char kAsyncSetAsDefaultExperimentEnabledNoRegistryGroupName[] =
63 "EnabledNoRegistry";
64
56 const char kEnableAsyncSetAsDefault[] = "enable-async-set-as-default"; 65 const char kEnableAsyncSetAsDefault[] = "enable-async-set-as-default";
57 const char kDisableAsyncSetAsDefault[] = "disable-async-set-as-default"; 66 const char kDisableAsyncSetAsDefault[] = "disable-async-set-as-default";
58 67
59 // Helper function for ShellIntegration::GetAppId to generates profile id 68 // Helper function for ShellIntegration::GetAppId to generates profile id
60 // from profile path. "profile_id" is composed of sanitized basenames of 69 // from profile path. "profile_id" is composed of sanitized basenames of
61 // user data dir and profile dir joined by a ".". 70 // user data dir and profile dir joined by a ".".
62 base::string16 GetProfileIdFromPath(const base::FilePath& profile_path) { 71 base::string16 GetProfileIdFromPath(const base::FilePath& profile_path) {
63 // Return empty string if profile_path is empty 72 // Return empty string if profile_path is empty
64 if (profile_path.empty()) 73 if (profile_path.empty())
65 return base::string16(); 74 return base::string16();
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 } 278 }
270 } 279 }
271 280
272 // Returns true if the AsyncSetAsDefault field trial is activated. 281 // Returns true if the AsyncSetAsDefault field trial is activated.
273 bool IsAsyncSetAsDefaultEnabled() { 282 bool IsAsyncSetAsDefaultEnabled() {
274 using base::CommandLine; 283 using base::CommandLine;
275 284
276 // Note: It's important to query the field trial state first, to ensure that 285 // Note: It's important to query the field trial state first, to ensure that
277 // UMA reports the correct group. 286 // UMA reports the correct group.
278 const std::string group_name = 287 const std::string group_name =
279 base::FieldTrialList::FindFullName("AsyncSetAsDefault"); 288 base::FieldTrialList::FindFullName(kAsyncSetAsDefaultExperimentName);
280 if (CommandLine::ForCurrentProcess()->HasSwitch(kDisableAsyncSetAsDefault)) 289 if (CommandLine::ForCurrentProcess()->HasSwitch(kDisableAsyncSetAsDefault))
281 return false; 290 return false;
282 if (CommandLine::ForCurrentProcess()->HasSwitch(kEnableAsyncSetAsDefault)) 291 if (CommandLine::ForCurrentProcess()->HasSwitch(kEnableAsyncSetAsDefault))
283 return true; 292 return true;
284 293
285 return base::StartsWith(group_name, "Enabled", base::CompareCase::SENSITIVE); 294 return base::StartsWith(group_name,
295 kAsyncSetAsDefaultExperimentEnabledGroupPrefix,
296 base::CompareCase::SENSITIVE);
297 }
298
299 // Returns true if the default browser choice should be reset for the current
300 // user.
301 bool ShouldResetDefaultBrowser() {
302 return !base::StartsWith(
303 base::FieldTrialList::FindFullName(kAsyncSetAsDefaultExperimentName),
304 kAsyncSetAsDefaultExperimentEnabledNoRegistryGroupName,
305 base::CompareCase::SENSITIVE);
286 } 306 }
287 307
288 bool RegisterBrowser() { 308 bool RegisterBrowser() {
289 base::FilePath chrome_exe; 309 base::FilePath chrome_exe;
290 if (!PathService::Get(base::FILE_EXE, &chrome_exe)) { 310 if (!PathService::Get(base::FILE_EXE, &chrome_exe)) {
291 NOTREACHED() << "Error getting app exe path"; 311 NOTREACHED() << "Error getting app exe path";
292 return false; 312 return false;
293 } 313 }
294 BrowserDistribution* dist = BrowserDistribution::GetDistribution(); 314 BrowserDistribution* dist = BrowserDistribution::GetDistribution();
295 315
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 736
717 // static 737 // static
718 bool ShellIntegration::DefaultBrowserWorker::SetAsDefaultBrowserAsynchronous() { 738 bool ShellIntegration::DefaultBrowserWorker::SetAsDefaultBrowserAsynchronous() {
719 DCHECK(IsSetAsDefaultAsynchronous()); 739 DCHECK(IsSetAsDefaultAsynchronous());
720 740
721 // Registers chrome.exe as a browser on Windows to make sure it will be shown 741 // Registers chrome.exe as a browser on Windows to make sure it will be shown
722 // in the "How would you like to open this?" prompt. 742 // in the "How would you like to open this?" prompt.
723 if (!RegisterBrowser()) 743 if (!RegisterBrowser())
724 return false; 744 return false;
725 745
726 ResetDefaultBrowser(); 746 if (ShouldResetDefaultBrowser())
747 ResetDefaultBrowser();
727 748
728 base::CommandLine cmdline(base::FilePath(L"openwith.exe")); 749 base::CommandLine cmdline(base::FilePath(L"openwith.exe"));
729 cmdline.AppendArgNative(StartupBrowserCreator::GetDefaultBrowserUrl()); 750 cmdline.AppendArgNative(StartupBrowserCreator::GetDefaultBrowserUrl());
730 return base::LaunchProcess(cmdline, base::LaunchOptions()).IsValid(); 751 return base::LaunchProcess(cmdline, base::LaunchOptions()).IsValid();
731 } 752 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698