Chromium Code Reviews| Index: chrome/browser/shell_integration_win.cc |
| diff --git a/chrome/browser/shell_integration_win.cc b/chrome/browser/shell_integration_win.cc |
| index 06dbc42d025ac612636b61e19ce233ebdeec3f5f..c8fc1ac86bd11b43b26bea15402ef5ec15fdea61 100644 |
| --- a/chrome/browser/shell_integration_win.cc |
| +++ b/chrome/browser/shell_integration_win.cc |
| @@ -32,6 +32,7 @@ |
| #include "base/strings/string_util.h" |
| #include "base/strings/stringprintf.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "base/task_scheduler/post_task.h" |
| #include "base/time/time.h" |
| #include "base/timer/timer.h" |
| #include "base/win/registry.h" |
| @@ -54,12 +55,9 @@ |
| #include "chrome/installer/util/scoped_user_protocol_entry.h" |
| #include "chrome/installer/util/shell_util.h" |
| #include "components/variations/variations_associated_data.h" |
| -#include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/utility_process_mojo_client.h" |
| #include "ui/base/l10n/l10n_util.h" |
| -using content::BrowserThread; |
| - |
| namespace shell_integration { |
| namespace { |
| @@ -150,8 +148,7 @@ base::string16 GetExpectedAppId(const base::CommandLine& command_line, |
| } |
| void MigrateTaskbarPinsCallback() { |
| - // This should run on the file thread. |
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| + base::ThreadRestrictions::AssertIOAllowed(); |
| // Get full path of chrome. |
| base::FilePath chrome_exe; |
| @@ -328,7 +325,7 @@ class OpenSystemSettingsHelper { |
| // watched. The array must contain at least one element. |
| static void Begin(const wchar_t* const protocols[], |
| const base::Closure& on_finished_callback) { |
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| + base::ThreadRestrictions::AssertIOAllowed(); |
| delete instance_; |
| instance_ = new OpenSystemSettingsHelper(protocols, on_finished_callback); |
| @@ -364,13 +361,16 @@ class OpenSystemSettingsHelper { |
| weak_ptr_factory_.GetWeakPtr(), ConcludeReason::TIMEOUT)); |
| } |
| + ~OpenSystemSettingsHelper() { |
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| + } |
| + |
| // Called when a change is detected on one of the registry keys being watched. |
| // Note: All types of modification to the registry key will trigger this |
| // function even if the value change is the only one that matters. This |
| // is good enough for now. |
| void OnRegistryKeyChanged() { |
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| - |
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| // Make sure all the registry watchers have fired. |
| if (--registry_watcher_count_ == 0) { |
| UMA_HISTOGRAM_MEDIUM_TIMES( |
| @@ -385,7 +385,7 @@ class OpenSystemSettingsHelper { |
| // |on_finished_callback_| and then dispose of this class instance to make |
| // sure the callback won't get called subsequently. |
| void ConcludeInteraction(ConcludeReason conclude_reason) { |
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| UMA_HISTOGRAM_ENUMERATION( |
| "DefaultBrowser.SettingsInteraction.ConcludeReason", conclude_reason, |
| @@ -398,6 +398,8 @@ class OpenSystemSettingsHelper { |
| // Helper function to create a registry watcher for a given |key_path|. Do |
| // nothing on initialization failure. |
| void AddRegistryKeyWatcher(const wchar_t* key_path) { |
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| + |
| auto reg_key = base::MakeUnique<base::win::RegKey>(HKEY_CURRENT_USER, |
| key_path, KEY_NOTIFY); |
| @@ -433,6 +435,8 @@ class OpenSystemSettingsHelper { |
| // Records the time it takes for the final registry watcher to get signaled. |
| base::TimeTicks start_time_; |
| + SEQUENCE_CHECKER(sequence_checker_); |
| + |
| // Weak ptrs are used to bind this class to the callbacks of the timer and the |
| // registry watcher. This makes it possible to self-delete after one of the |
| // callbacks is executed to cancel the remaining ones. |
| @@ -464,6 +468,8 @@ class IsPinnedToTaskbarHelper { |
| ErrorCallback error_callback_; |
| ResultCallback result_callback_; |
| + SEQUENCE_CHECKER(sequence_checker_); |
| + |
| DISALLOW_COPY_AND_ASSIGN(IsPinnedToTaskbarHelper); |
| }; |
| @@ -497,6 +503,8 @@ IsPinnedToTaskbarHelper::IsPinnedToTaskbarHelper( |
| } |
| void IsPinnedToTaskbarHelper::OnConnectionError() { |
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| + |
| error_callback_.Run(); |
| delete this; |
| } |
| @@ -504,6 +512,8 @@ void IsPinnedToTaskbarHelper::OnConnectionError() { |
| void IsPinnedToTaskbarHelper::OnIsPinnedToTaskbarResult( |
| bool succeeded, |
| bool is_pinned_to_taskbar) { |
| + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| + |
| result_callback_.Run(succeeded, is_pinned_to_taskbar); |
| delete this; |
| } |
| @@ -511,6 +521,8 @@ void IsPinnedToTaskbarHelper::OnIsPinnedToTaskbarResult( |
| } // namespace |
| bool SetAsDefaultBrowser() { |
| + base::ThreadRestrictions::AssertIOAllowed(); |
| + |
| base::FilePath chrome_exe; |
| if (!PathService::Get(base::FILE_EXE, &chrome_exe)) { |
| LOG(ERROR) << "Error getting app exe path"; |
| @@ -530,6 +542,8 @@ bool SetAsDefaultBrowser() { |
| } |
| bool SetAsDefaultProtocolClient(const std::string& protocol) { |
| + base::ThreadRestrictions::AssertIOAllowed(); |
| + |
| if (protocol.empty()) |
| return false; |
| @@ -625,6 +639,8 @@ DefaultWebClientState IsDefaultProtocolClient(const std::string& protocol) { |
| namespace win { |
| bool SetAsDefaultBrowserUsingIntentPicker() { |
| + base::ThreadRestrictions::AssertIOAllowed(); |
| + |
| base::FilePath chrome_exe; |
| if (!PathService::Get(base::FILE_EXE, &chrome_exe)) { |
| NOTREACHED() << "Error getting app exe path"; |
| @@ -643,7 +659,7 @@ bool SetAsDefaultBrowserUsingIntentPicker() { |
| void SetAsDefaultBrowserUsingSystemSettings( |
| const base::Closure& on_finished_callback) { |
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| + base::ThreadRestrictions::AssertIOAllowed(); |
| base::FilePath chrome_exe; |
| if (!PathService::Get(base::FILE_EXE, &chrome_exe)) { |
| @@ -670,6 +686,8 @@ void SetAsDefaultBrowserUsingSystemSettings( |
| } |
| bool SetAsDefaultProtocolClientUsingIntentPicker(const std::string& protocol) { |
| + base::ThreadRestrictions::AssertIOAllowed(); |
| + |
| base::FilePath chrome_exe; |
| if (!PathService::Get(base::FILE_EXE, &chrome_exe)) { |
| NOTREACHED() << "Error getting app exe path"; |
| @@ -691,7 +709,7 @@ bool SetAsDefaultProtocolClientUsingIntentPicker(const std::string& protocol) { |
| void SetAsDefaultProtocolClientUsingSystemSettings( |
| const std::string& protocol, |
| const base::Closure& on_finished_callback) { |
| - DCHECK_CURRENTLY_ON(BrowserThread::FILE); |
| + base::ThreadRestrictions::AssertIOAllowed(); |
| base::FilePath chrome_exe; |
| if (!PathService::Get(base::FILE_EXE, &chrome_exe)) { |
| @@ -731,14 +749,12 @@ void MigrateTaskbarPins() { |
| if (base::win::GetVersion() < base::win::VERSION_WIN7) |
| return; |
|
gab
2017/05/26 18:44:06
Can we remove this check while you're here, we onl
Patrick Monette
2017/05/29 18:54:14
Will do in another CL
|
| - // This needs to happen eventually (e.g. so that the appid is fixed and the |
| - // run-time Chrome icon is merged with the taskbar shortcut), but this is not |
| - // urgent and shouldn't delay Chrome startup. |
| - static const int64_t kMigrateTaskbarPinsDelaySeconds = 15; |
| - BrowserThread::PostDelayedTask( |
| - BrowserThread::FILE, FROM_HERE, |
| - base::Bind(&MigrateTaskbarPinsCallback), |
| - base::TimeDelta::FromSeconds(kMigrateTaskbarPinsDelaySeconds)); |
| + // This needs to happen (e.g. so that the appid is fixed and the |
| + // run-time Chrome icon is merged with the taskbar shortcut), but it is not an |
| + // urgent task. |
| + base::PostTaskWithTraits(FROM_HERE, |
| + {base::MayBlock(), base::TaskPriority::BACKGROUND}, |
| + base::Bind(&MigrateTaskbarPinsCallback)); |
| } |
| void GetIsPinnedToTaskbarState( |